コワクナイBigQuery - チームでデータを活用するための活動について

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を使っています.

利用者であるチームメンバー(エンジニアおよびデータを使いたい人すべて)には以下の図のような仕組みを提供しています.

f:id:shinyorke:20200425131222p:plain
【図】BigQueryを取り巻く仕組み

データ基盤を構築し, 運用し始めた当初は「Colab(Jupyter notebook)とRedash, Data Portal用意すればまあイケるのでは?」と思っていたのですが,

  • BigQueryは噂でしか聞いたことない, サービスのDBを直接分析する場合との違いは?
  • BigQueryはお金がかかる, という風潮. 「数百万円飛ぶでしょ?」的な

という声があったり雰囲気を感じたりしました.

確かに, 自分でBigQueryを使っていても「このクエリって流したらいくらだ💰?」とか気になります.

というわけで,

  • BigQuery(含むデータエンジニアリング)の正しい知識を普及しよう
  • 毎日コストを見ることができればええやん!

この2つをシュッとやることにしました.

BigQueryに関する正しい知識を

正しい知識を普及する, 植え付けるのであれば自分から動けばエエやん!...ということで,

  • BigQuery使いたいぞっていうメンバーがいるとき
  • データ分析のインターンがJoinする時のオンボーディング*2

...というタイミングで社内勉強会を不定期に開催しています*3.

これについては, 私が作ったテキスト(社内のKibelaに公開)を用いてやっています.

f:id:shinyorke:20200425133707p:plain
JX通信社版・BigQueryの教科書

このテキストの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を開発・運用し始めました.

f:id:shinyorke:20200426122234p:plain
毎日通知, 一定金額超えたら赤くなります

大変ありがたいことに, GCPにはアカウントの利用料金を定期的にBigQueryに流す仕組みが提供されており,

  • 毎日BigQueryの特定のテーブルにデータが入る
  • ↑のコストをSlackにつぶやかせればいい!

という実にシンプル過ぎるやり方でできる事がわかり, 二日ちょっとで開発・運用スタートしました.

ちなみに仕組みはこんな感じです.*6

f:id:shinyorke:20200425140045p:plain
コスト監視マンのアーキテクチャ

数行の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の施策の真意はここにありました. 知ることと見える化は大事なのです.