インテージテクノスフィア技術ブログ

株式会社インテージテクノスフィアの社員達がシステム開発や仕事に関する技術情報を随時掲載いたします

大成功!データハンドリング技術コンペ 企画・課題編

こんにちは。インテージテクノスフィア技術ブログ担当アイダです。

データの価値を高める技術やスキル・ノウハウはわたしたちの業務に欠かせません。今回、データハンドリング技術分野のスキル向上のため、社内の各部署にいるツワモノを集めて競い合うイベントがあったら盛り上がるのでは?という事で、私アイダも所属している技術探究委員会のNさんが中心となって「データハンドリング技術コンペ」が実現しました。

データサイエンティスト不足が社会問題になっている昨今、育成に関わる方の参考になれば幸いです。どんなイベントだったか2回に分けて投稿します。今回は企画・課題編です!

企画内容

データハンドリング技術を社内で競う!

より多くの人が取り組みやすそうなテーマ「SQL」を選択。データを使った指定課題に対し、正しく集計できていることを前提に集計時間を計測して得点を付与、合計得点で順位を競いました。

目的

  • 「実は結構スゴイじゃん、自分!!」といった自己保有スキルの肯定・客観化
  • 「あの人の考え方参考になる!悔しいから勉強しよう!!」といった知見の共有や技術力の底上げ
  • 結果を共有することによる 「あの部署のスキル、スゴイから今度話を聞かせてもらいたい!」といった部署間のスキルレベル可視化・共有

参加者

グループウェアの掲示板にて参加者募集を呼びかけました。初めてのコンペ形式の企画という事もあり、どれくらい人が集まるか不安もありましたが、主催者予想を上回る12チーム29名が参加してくれました。

経験値も1年目の新人から60代の大先輩まで、部署も年齢も役職も超えた異種格闘技的戦いとなりました。この点は当社でSQLが非常に幅広く利用されていることも大きな理由だったかもしれません。開発者が利用するのはもちろんですが、DWHによる抽出作業を営業担当が実施したり、社内業務システムの条件指定機能にSQL記述を利用できるようにするなども、SQLが共通言語に近い形で利用されていることを実感いたしました。

ポスター(一部マスキングしてます)

実施ルール

課題提示から約2週間後を締め切りとして、集計結果と集計クエリを提出してもらいました。締め切り日より前であれば何度提出しても問題なしです。

基本ルール

  • 参加チームには同一の Windows Server 2016 サーバ環境(AWS EC2)を提供

  • EC2インスタンスタイプ:t3.large EC2の設定およびOSの設定変更は禁止

  • EC2には SQLServer2017 Developer Edition とデータテーブルがすでにセット済みで提供

  • SQLServer 2017 の中に限り設定変更OK

  • 利用データは20カラム4000万行の1テーブルで提供。インデックスはない状態

  • 利用データは1年間の架空売上データ。商品名などもすべて同一データ内に持つつくり(商品マスタは無し)

  • 元テーブルの設定変更は可ですが、データ更新は不可

  • ストアドプロシージャの使用や、インデックスの追加なども自由。ストアド登録、インデックス更新も計測には含まない

  • 別名テーブルの作成や#付きの一時テーブルの作成、View作成もOKだが、そのテーブル・View作成も処理時間に含む

課題

2つの課題を出題しました。

出力すべきExcelの表を提示し、各項目の仕様書をお渡ししました。例としてexcelが下記図のような場合、 「会社Aを利用した人(①)の中で、他の会社を利用した人の数(②)と、その割合も算出する」等、各項目について業務指示書レベルの詳細仕様書を作成しました。

またルールとして、集計結果を指定されたExcel上の表にコピー&ペーストで貼り付けられることとしました。集計結果の成形もSQLで実施してくださいということですね。

計測ルール

後から再現できるように以下のルールを設定しました。

  • 処理開始時は必ず以下2つの構文を実行し、キャッシュをクリアした状態からスタート
DBCC DROPCLEANBUFFERS

DBCC FREEPROCCACHE
  • 構文の先頭と末尾に以下の構文を置いて、時間計測を行ってください
開始前: declare @st datetime = getdate()

終了後: declare @et datetime = getdate()

         select convert(varchar,@et-@st,114) as exe_time
  • 処理時間は3回の計測の平均値として、集計結果と処理時間をエビデンスとして残してもらいました

順位付けルール

  • 各課題での成績に応じて得点を付与し、全課題の合計得点で順位を決定しました。

  • 順位ごとのポイント配分は以下の通り

1位:100pt 2位:80pt 3位:50pt 4位:30pt 5位:10pt 6位以下:0pt

※※集計ミス、指定フォーマット外の集計は0ptとなります※※

  • 総合ポイントが同じ場合は合計タイムでの順位付けにしました。

途中経過と中間結果

ということでルールを提示後2週間の中で各チームが業務と並行で頑張ってくれました。提出すると正解かどうかを委員会側で確認する手順です。

2問目の課題設定の不備を参加メンバーから指摘され、課題の修正を行うなどのハプニングもありました。皆本当に真剣なのをヒシヒシと感じました。

また1週間経過時点で中間結果を発表しました。以下発表時の表です。

f:id:intage-tech:20200405142126p:plain

この中間結果公表で若手が上位に来ているなどもあり、上層部も誰が優勝するかで盛り上がるなどしていたようです。

ということで企画紹介編でした。次回は「誰が一番強かったのか!」結果と参加者の方の感想を書きます。