takeda_san’s blog

KotlinとVRを頑張っていく方向。

CA.io #2 snowflakeに参加したので活用場面を考えてみる

きっかけ

CA.ioのsnowflake回に参加しました。
ちょうどチーム内でsnowflakeどうなのよという話をしていたのでベストなタイミングでした。

cyberagent.connpass.com

折角、活用ポイントを聞いたので自分達に置き換えたときにどの辺に使えるかを考えてみる。
データをTableauでビジュアライゼーションして、見てもらうのが目的なものを想定。
まだ、検証も何もしてないのでただの妄想です。

ログをAWSのS3+Glue+Athenaで格納している場合

よくある構成

f:id:takeda_san:20200728220121p:plain

ログをAWSのS3+Glue+Athenaで格納している場合、こんな感じの構成でよくつくります。
S3に置いたCSVなりjsonなりのファイルをGlueのクローラで走査してデータカタログを作る。
これをAthenaで手動エクスポートしたり、Batchで集計かけて必要な粒度、切り口でRDSに格納する。
それをTableauでビジュアライゼーションする。
(なぜAthenaを直接データソースにしないのかは、後述)

よいところ

  • データの実体がS3にあるので、データサイズをあまり気にしなくてよい
  • Athenaなので使った分課金でSQL検索ができる

もっとよくできそうなところ

  • データカタログの更新が大変
    Lambdaかなんかで定期実行で大丈夫なんだけど、失敗したときの面倒がちょっと大変
  • TableauからAthenaを参照したときに認証周りがちょっと弱い
    Athenaをデータソースにするときにアクセスキーでの認証のみに対応してるのでIAMを主に使っているとちょっと躊躇する
    Amazon Athena - Tableau
  • Batch集計の粒度違い、切り口違いが出てくるたびに集計処理を書く必要がある
    元のログファイルが大きい場合にRDSとかにそのまま入れるとコストがかさむので、用途ごとに入れたいんだけどちょっとの集計の違いで毎回バッチ書くのがちょっと大変

snowflake使うとこうなるのかな?

f:id:takeda_san:20200728222726p:plain

S3にファイルを置けば済む世界・・・

だいぶシンプルになりましたね。
ファイルをS3に置けばsnowpipeでロード&メタデータ自動生成。
(Athenaでも同じ機能ありますね)
定義を任意で指定することもできるようです。

あとは、Tableauから取り込み先のsnowflakeに接続してビジュアライゼーションすればよさそう。
認証はユーザ名パスワードとOAuthに対応しているみたいです。

Snowflake - Tableau

よさそうなところ

  • 自前の処理が減る
    元のAthenaでは存在したデータカタログの更新やRDSに切り出していたBatchがいらなくなるので、この運用から解放されそうです
  • ほかのチーム、会社とのIFが楽になる
    S3にファイルで置いてもらえば連携が済んでその先の処理は書かなくて良いのでファイル連携が気軽になりそうです

もうちょっと知りたいところ

元々あったRDSへのBatch経由での切り出し、集計をsnowflake内で出来るかどうか。
なんかそこまでできちゃうと単なるDWHではない気がするので、そこは自分でやろうねという感じなのかな…?
見る人によって、行単位、列単位で見れるデータを制限したい要望はありそうなので…?
ちょっと、要お勉強。

さいごに

CA.ioのsnowflake回。
ドキュメントを読むだけだと把握に時間がかかる、製品概要や実際のユースケースを一時間ちょっとでキャッチアップできる非常にありがたい勉強会でした。

直近ではBigQuery Omniが発表されて、様々なデータソースを一つのインタフェースで取得するという要求に他にも選択肢が増えそうでワクワクではあります。
今現在BigQueryからデータを取得するということが多いので、そのままのインタフェース使えるのであれば非常に魅力的です。
(Tableauからも使い勝手いいですし)