JX通信社でシニア・エンジニア&データ基盤エンジニアをしています, @shinyorke(しんよーく)です.
最近のStayHome生活は, 「YouTubeでUK Rock🎸, お笑いの動画を見まくる」「地元のお取り寄せグルメを楽しむ」「野球データ分析に集中する」で楽しんでいます.
JX通信社では, 「FASTALERT」などのプロダクトのデータをBigQueryに集約し,
- 機械学習を用いたプロダクト開発・施策
- プロダクト・サービスの改善に関する分析
- 日々のイベントをメトリクス化して可視化(いわゆるBI的なもの)
に活用しています.
このエントリーでは,
???「BigQuery?使い方わからないし💰かかるって噂を聞くのでコワイよ」
ワイ将「BigQueryコワクナイヨー, ガンガンBigQuery使えるように仕組み作ったので乗っかりましょ!」
というお話を残したいと思います.
TL;DR
- 「仕組みの理解」「コストの可視化」を愚直にやっていけば, BigQueryはコワクナイ. むしろ友だちになれる!
- RDBMSとの違い(特にカラムナー), データサイエンスな人にはPandasとの共通点を教えれば仕組みはしっかり伝わる
- コストの可視化は本気でやれば2日くらいでシュッとできます.
会社やご家庭でBigQueryをお使いな方の参考になると嬉しいです.
スタメン
全体像 - 今現在の姿
JX通信社では, 昨年の秋から全社的なデータ基盤を構築・運用を開始し, 利用者・使いたい人の声を元に日々改善を行っています.
データ基盤全体はGCP上に構築(ETLの一部タスクを除く*1), DWHはBigQueryを使っています.
利用者であるチームメンバー(エンジニアおよびデータを使いたい人すべて)には以下の図のような仕組みを提供しています.
データ基盤を構築し, 運用し始めた当初は「Colab(Jupyter notebook)とRedash, Data Portal用意すればまあイケるのでは?」と思っていたのですが,
- BigQueryは噂でしか聞いたことない, サービスのDBを直接分析する場合との違いは?
- BigQueryはお金がかかる, という風潮. 「数百万円飛ぶでしょ?」的な
という声があったり雰囲気を感じたりしました.
確かに, 自分でBigQueryを使っていても「このクエリって流したらいくらだ💰?」とか気になります.
というわけで,
- BigQuery(含むデータエンジニアリング)の正しい知識を普及しよう
- 毎日コストを見ることができればええやん!
この2つをシュッとやることにしました.
BigQueryに関する正しい知識を
正しい知識を普及する, 植え付けるのであれば自分から動けばエエやん!...ということで,
- BigQuery使いたいぞっていうメンバーがいるとき
- データ分析のインターンがJoinする時のオンボーディング*2
...というタイミングで社内勉強会を不定期に開催しています*3.
これについては, 私が作ったテキスト(社内のKibelaに公開)を用いてやっています.
このテキストのTL;DR的なモノを一部紹介すると,
- BigQueryは普段使ってるRDBMSとは違い, DWHであり列指向データセットである.
- select文で検索する, joinする, 集計する的なのはDBと変わらないが, 必ず必要な列だけ使う&範囲を絞って使う.
- 必要な列だけ取得し, 対象範囲を絞ってもらえればお安く使える.
必要なことを最短距離で覚えられる内容にしています. 3分34秒以上かかるかもですが*4.
ちなみに教え方のコツとしては,
- RDBMSを知ってる人には「列指向」な事をしっかり教える. MySQLやPostgreSQLで培ったIndexとかの知識は使えないよっていうのを理解してもらう.
- そもそもDBやSQLを触ったことがない(インターンなど若い人に多い印象)にはPandasやRでよく使うDataframeにたとえて教える.*5
これでいい感じになります.
常にコストを監視できる仕組み
正しい知識を身に着けてもらった後, BigQueryの利用頻度が増えてウッキウキでしたが,
インターン生「shinyorkeさんこのクエリ実行して大丈夫ですか💰?」
ワイ将「お, おう...(そっか心配だよね)」
っていうやり取りが増えました.
せっかくいい感じに分析してもらったりレポート出してもらってるのに彼らを心配にさせちゃいけないよなあ〜ということで,
毎日GCP全体およびBigQueryのコストを通知するSlack Botを開発・運用し始めました.
大変ありがたいことに, GCPにはアカウントの利用料金を定期的にBigQueryに流す仕組みが提供されており,
- 毎日BigQueryの特定のテーブルにデータが入る
- ↑のコストをSlackにつぶやかせればいい!
という実にシンプル過ぎるやり方でできる事がわかり, 二日ちょっとで開発・運用スタートしました.
ちなみに仕組みはこんな感じです.*6
数行のSlack Botでできちゃうのでこれは強くオススメです!
結び
「コワクナイBigQuery」の成果ですが,
- BigQueryに関する知識がついた・恐怖心が無くなったメンバーが使ってくれたり
- インターン生たちが自主的にSQLを覚えて, データ分析やダッシュボード作りに活用してくれたり
- 特定のパターン・クエリに対するお値段という「相場」が誕生したことにより, 大胆にBigQueryでガンガンSQLを流すことが可能に
...という, 「まずは使ってみよう, アウトプットだそう!」という流れができました.
基本を教える, コスト感を掴むという視点で心理的安全性ができたのかなーというのが私の感想です*7.
ちなみに自分はインターン生にSQLを共有した所, 「shinyorkeさんもっといいやり方あるよ」的なレビューを受けたりもしました, これは素直に嬉しい.
今後は,
- ビジネス・セールスメンバーがもっとデータで攻められる用にデータセットやダッシュボード増やしたり
- 筋がよいSQLやデータ・ダッシュボードを共有したり
といった所で活用事例を伸ばしたいなと思っています.
最後までお読みいただきありがとうございました!
*1:サービスの大半がAWSで運用しており, Extractに当たるタスクはAWSを使っています.
*2:ちなみにですが, 4/30現在ではデータ分析インターンの募集は締め切っております :gomen:
*3:過去に3回ほどやりましたが, いずれもZoomでリモート参加可能な会でした.
*4:なんでや阪神(以下略)
*5:PandasもRも列方向で探索するのに最適化しているモノなので.っていうのとMethodとの関係も伝わるので相当おすすめです
*6:アーキテクチャそのものは自分が過去にやった事例をベースにやりました.もっというと構成図もパクった.
*7:正直な話, コワクナイBigQueryの施策の真意はここにありました. 知ることと見える化は大事なのです.