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

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

大成功!データハンドリング技術コンペ 結果発表編

こんにちは。インテージテクノスフィア技術ブログ担当アイダです。今回は「データハンドリング技術コンペ」の結果発表についての投稿をします。

業務外のイベントでしたが、こんなにも盛り上がり、また、実際に優勝者のノウハウが業務に生かさせたという報告も聞き、主催者としてこんな嬉しいことはありません。在宅ワークでも出来るイベントです。みなさんの学校、会社でも企画してはいかがでしょうか。

結果発表イベント

「データハンドリング技術コンペ 企画・課題編」に記載した指定課題を各チームに取り組んでもらい、その結果発表イベントを開催しました。

www.intage-ts.com

当初は、エントリーメンバー以外のギャラリーも参加OKにし、盛大に実施する計画でした。しかし開催の2月中旬頃は、すでに新型コロナウィルス感染防止対応として、たくさんの人が集まるイベントは自粛。時間短縮&エントリーメンバーの代表のみ参加し、各事業所に中継する形で開催しました。

自作した「I♡SQL」とプリントされたTシャツで司会をするNさん

インデックスの追加や実行プランの解析だけでなく、SQLServer2016より本格実装されたカラムストアインデックスの利用など、様々な技術を駆使しながら、各チームが白熱した戦いを見せました。ひばりと秋葉原でメンバーが分かれているチームは、業務さながらにslackやconfluenceをフル活用して課題に取り組んでいたとの事です。

事前の中間報告時点で、各チームとも自己タイムと正解/不正解をフィードバック。本番までにさらにブラッシュUPされたようで、激戦になりました。

そして結果発表!正解かつSQL実行時間で得点を付与。合計得点で順位を競いました。上位5位チームの結果は以下の通り

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

見事、総合第1位に輝いた「Kさんチーム」には、賞状と賞金に加え、司会のNさんが着ていた「I♡SQL Tシャツ」が贈呈されました。勝者のガッツポーズ、かっこいいですねー!!

主催側では、中間報告ですでに正解をたたきだしていた「AID本部の若者チーム」に注目しつつ、当社のデータハンドリングの先生的存在である「医薬ドリームチーム」が手ごわいと思っておりました。「粉雪チーム」は、「粉雪~♪ 美しい雪の結晶(Snowflake)の虜になった話」

www.intage-ts.com

のブログ執筆者、ミスター粉雪、Kさんがいるチームで、こちらも目が離せませんでした。「部長4時間で完了チーム」、ここが優勝したらカッコ良すぎでしょう・・ など、その競合の中で、優勝したKさんチームは神です。

今回、見事2問とも正解した第3位「医薬ドリームチーム」ことBI第一本部医薬ユニット医薬情報三部のSさん、それから中間発表時点でどこよりも早く2問とも正解してきた!と評判になった第4位の「AID本部の若者チーム」ことAI・データビジネス本部 ビジネス推進部Aさんに、参加の感想をいただきましたので掲載させていただきます。

参加者の感想「医薬ドリームチーム」Sさん ~ 純粋に1秒単位のタイムを縮めることに専念したのは初めての経験 ~

医薬情報三部のSと申します。

自分が書いた文章を公開するのは、高校時代に友人と遊びで作ったホームページにブログを書いた(黒歴史)以来です。

とある映画タイトルと同じホームページ名にしていたため、金曜ロードショーでその映画が放映された際に爆発的なアクセス数を記録してしまい、慌てて非公開にしたのは良い思い出です。リテラシーって大事ですね。つたない文章ですが、ご容赦ください、、

今回コンペの結果は、第3位と悔しい結果でしたので、ブログを書かせていただくのはとても恐縮ですが、頑張ります。

参加の経緯

コンペが掲示板に掲載されるとほぼ同時に元上司からお誘いを受けました。

そこからOさんにお声掛けいただき、Kさん(サーバー側のプロ)、Oさん(SQLのプロ)、私S(結果検証係)の布陣で臨むこととなりました。

同期がひとりで参加している中、なかなかな医薬ドリームチームに加わってしまったことに罪悪感を感じていました。

※アイダ注:KさんOさんのお二方は、主催者はもとより社長など上層部も参加を驚いた当社を代表する技術者のお二人です。

課題への取り組み

他チームの皆さんのご報告にもありましたが、チューニングは特別なことはしていません。

クエリ作ってみて、SQL Serverが教えてくれる実行プランを見て、おすすめしてくれるインデックスをつけてみたりクエリ直してみたり、、、等、基本的なところを試してみる感じです。

苦労したところは、課題の言葉の意味を理解することでした。

中間報告を行った際に「かなり惜しい!」と評価いただきましたが、どこが違うのか見つけられず、いろんなことに疑心暗鬼になった結果、問題に何か暗黙知が隠れているのでは?という疑念にかられる最終日を迎えました。

(最終的に3人で深夜に「平均」の意味を議論しました)

一度も見たことのないデータ形式に、こんなデータの見方するんだ、こんなデータの持ち方をするんだ、等々、とても新鮮な体験をさせていただきました。

といいつつ、本当に苦労したのは、期間中3人中2人が交互にリフレッシュ休暇を取得していたため、実質1週間の戦いとなったことです、、時間さえあれば、と負け犬の遠吠えをつぶやいておきます。

新鮮だったこと

その1:データそのもの

 上段でも記載しましたが、データそのものがかなり新鮮でした。個人的に定義書や仕様書をみるより、データをいろいろ検索してみて全体を把握するのが好きなので、課題にかかった時間よりもデータをいろいろ見ていた時間の方が長かったです。

その2:業務じゃない

 この取り組みならではだったのが、工数や他のデータ参照を気にせずにチューニングできたことです。

 もちろん、時間は無限にあったわけではないですが、普段SQLのチューニングは夜間処理が終わらない、運用が滞る等、業務に支障があった時にしかしていません。純粋に1秒単位のタイムを縮めることに専念したのは初めての経験でした。

 また、参照についても、業務であればひとつのテーブルをいくつもの処理や画面が参照しているため、ひとつのクエリに特化したインデックスを考えたことはありませんでした。気にしなくていいって最高です。

(余談ですが、以前、参照用のインデックスをつけすぎて、夜間のデータインサートが数時間かかっている事件がありました。)

次回への意気込み ~各メンバーより~

Kさん:次回はさらなる難問を楽しみにしています。

Oさん:SQLには自信があったのですが、今回の技術コンペは改めて勉強になりました!猛勉強して次回に挑みます。あと、楽しかったです。

私S:業務で他部署の方と関わったことがないため、今回のコンペで交流できたことがとてもうれしかったです。今後もこういった形で他部署の方と関わっていけたらいいなと思います。

最後に

末筆ではございますが、、今回のコンペ開催にご尽力いただいた皆様、本当にお疲れ様でした!楽しかったです、ありがとうございました!

参加者の感想「AID本部の若者チーム」Aさん ~上位結果チームより、UNIONやCTEを使うのが速いと知った~

中間で数値があっていた理由

  • まずは、速度やコードの可読性等々は度外視して正しい出力を得るところに集中した、といったところですかね。。

  それが仇となって、速度改善の試行錯誤がやりづらかったとかはあると思いますが。

苦労した点

  • 実行速度重視という観点でSQLを書いた経験がなかった

  =いろいろな書き方を知っていても、どれが速いのかがわからなかった

  • 具体的な目標(e.g., ●秒以内にする)があるわけでなく、どこまでやればよいのかゴールがない。。

  なにをチューニングすればよいのか手探りだった。

  ⇒実行計画をみて警告に従っていく、というふうに系統だった方法をとればよかった。

次回への意気込み ~各メンバーより~

  • せっかくなので、新しいor使ったことのない機能を試す機会としても活用したい。(Kさん)

  • いろんな人のSQLの書き方を知ることができたり、あまり使ったことのなかったSQLServerを触れて勉強になった

  特に私は最終アウトプットの形にあわせて、込み入ったSQLを書いていたので改善したい

  上位結果チームより、UNIONやCTEを使うのが速いと知ったので試してみたい(Aさん)

総括「3つのすごいじゃん!」

今回のイベントをとおして、主催者は、3つのすごいじゃん! に気づきました。

すごいじゃん!その1:圧倒的プロの力…!!

今回参加いただいた中には、SQLServerを日常的に利用されている方も多く、最終結果の上位層の圧倒的速度にはただただため息が出るばかりでした。

但し、当社は1人1人が何らかのプロフェッショナルであると思います。

今回はSQLServerでのチューニングを含めた速度計測でしたが、OracleやMySQL、PostgreSQLを利用した場合どうなるか。 また、そもそもSQLではなく別の内容でのコンペなら?

多様な分野のプロフェッショナルが集まって何か1つのことを成そうとした場合、うまくすればすごいシナジー効果が生まれるのではないか、そんな可能性を強く感じました。

すごいじゃん!その2:場所なんて関係ないんや…!!

主催側から提供をしたのは1チームにつき1サーバのみです。

全てのチームに同じスペックのサーバをお渡ししたのですが、ちょっと弱めのインスタンスにちょっと重めのデータを搭載したSQLServerで、リモートで接続可能なのは1人のみというそこそこ不便な環境でした。

このような環境の中で、とあるチームは「Slack」や「Confluence」を活用し、別拠点にいるメンバーとうまく連携を取っていたようです。

業務でも活用しているツール類で今更かもしれませんが、このようなコミュニケーションツールをうまく活用するのも物理的な拠点間距離を縮められる方法の1つであると感じました。

すごいじゃん!その3:「助かったニャ!!」

コンペ上位者のSQLを参考に、トラブルを解決した事例があったようです。

コンペの結果が早速現場で活きた!!すごい!!やったー!!

今回のテーマの一つに「部署間のスキルレベル可視化・共有」というものがありました。

参加者へのアンケートでは、90%以上の方が、なんらか「技術力の底上げ」や、「技術の可視化」を実感したといううれしい結果となりました。

このような機会を通じて、それぞれの部署で保持しているスキルや知見の横展開や各自の技術の向上などに繋げていければよいなと思いました。