🧑‍🎓

Snowflake 1年目の教科書

2022/12/16に公開

前置き

こんにちは。株式会社GENDAのデータエンジニアのこみぃです。

このたび、若輩ながらSnowflakeのアドベントカレンダーに参加させていただきます。
https://qiita.com/advent-calendar/2022/snowflake

弊社では2022年の2月にSnowflakeの技術検証をはじめ、4月に正式に導入しました。

この記事では、Snowflakeを導入して1年ほど経った今を振り返って、これから導入される方向けにSnowflakeを導入して最初の1年にやるべきだと思うことをまとめていこうと思います。

そういうわけで、早速参りましょう。

Snowflakeの機能を一通り把握しよう

Snowflakeを導入し始める動機は様々ですが、データウェアハウスとしての導入が一番多いと思います。
Snowflakeは様々な機能を提供しているサービスで、データウェアハウスとしての機能以外にも様々な機能があります。

そして、データウェアハウスの用途で使っている限りあまり気づけない機能もあります。それは非常に MOTTAINAI!!

まずは一覧をしっかり読んで、わからないところはググって調べるなどして、一度一通り把握するのをおすすめします。余裕があれば各機能一回試すといいですね。
https://docs.snowflake.com/ja/user-guide/intro-supported-features.html

後述のコミュニティ活動を通じていろいろな企業がどういう使い方をしているかを聞くというのもオススメです。

データをSnowflakeに転送する方法を把握しよう

機能について把握したら、次はSnowflakeにデータを転送する方法を把握しましょう。
これは自分のサービスが使っているプラットフォームに合わせて覚えるのが良いと思います。

弊社はAWSを使っていますので、AWSをプラットフォームに選んだSnowflakeにデータを転送する方法を把握すればOKという感じです。

私が把握している限り、AWSにあるSnowflakeにデータを転送する主な方法は以下の通りです。

  • csvかndjsonかparquetファイルをS3に置いてCOPYコマンドで取り込む
  • RDSからDMSとSnowpipeを使ってデータを取り込む
  • Lambdaなどで直接Snowflakeに接続してinsertする

1つ目の「S3に置いて取り込む」というのが非常に重要で、KinesisFirehoseやAPIGatewayと組み合わせるなどして様々な種類のパイプラインを構築することができます。

これらを把握しておくとデータパイプラインの構築が非常に捗りますし、後々構成を見直す手戻りが減ります。

BIツールを導入しよう

これはあまり言うまでもなく皆様やると思うのですが、一応言及しておきます。
SnowflakeのWEB-UIのダッシュボードは残念ながらややイケてないので、データを参照するために別のBIツールを導入しましょう。

弊社はredashを使っていますが、他にも色々選択肢はありますのでそこはお好みで。

データ基盤は活用されないと意味がありませんので、活用する方法とセットで整備しましょう。

権限管理(RBAC)をしっかり理解しよう

これは弊社は理解するのが遅くて後悔している項目です。

Snowflakeの特徴と呼べるのが権限管理の仕組みです。

SnowflakeではRole Base Access Control(RBAC)という仕組みを採用していて、テーブルだけではなくwarehouseなどのすべてのオブジェクトがロールに紐付いて権限管理がされます。
https://docs.snowflake.com/ja/user-guide/security-access-control-overview.html

この構造を理解して、ロールの構造や上下関係を最初の時点で整理しておくのが良いです。

現状ベストプラクティスと思われるのは役職のロールを作って階層を整理するやり方になります。こんな感じかな。

弊社では最初にこの整理をしなかったので、 どこの階層にも属さない独立したロールが乱立していてあとで整理する羽目になりました

Warehouseは分けよう

ロールを整理したら、Warehouseも整理しましょう。
こちらも弊社はあとからやって少し苦戦しました。

基本的には アクセスするツールや場面によってWarehouseを分ける のが良いと思います。
同じツールからでも定常的な処理とアドホックな処理ではWarehouseを分けて、それぞれの用途で最適なサイズのWarehouseを使うのがオススメです。

クレジットの消費を注視しよう

日々のクレジット消費は定期的に確認しましょう。
WEBコンソールであるsnowsightのの Admin -> Usage で確認することができます。

たまに何かしらのシステムの仕様で思わぬ形で大量消費されていることがあります。 早期発見早期治療 が必要です。

特にBIツールなどを導入している場合などは注意が必要です。
過去に弊社がやらかした例を置いておきますので、参考にしてください。
https://zenn.dev/kommy339/articles/6e7f3ecedfb7c5

この時に、 ロールやWarehouseをしっかり分けておくと原因究明が早くなる という利点もあります。

dbtを導入しよう

データウェアハウスとしてSnowflakeを使う場合、蓄積したデータをSnowflake上で一次加工してから参照することが多いと思います。

この一次加工はSnowflake Taskでも可能なのですが、 初期段階からdbtを導入すること を強くオススメします。
dbtを使う利点としては以下があります。

  • 一次加工のタイムラインを管理しやすい
  • コードをgithubで管理できる
  • データの定義を一緒にバージョン管理できる(データカタログ)

規模が一定以上大きくなって定期処理が多くなるとSnowflake Taskで管理するのはやや厳しいというのが現状です。(SnowflakeTaskの管理画面がパワーアップしたら変わる可能性もありますが、現状は。)

弊社は恥ずかしながらdbtの導入が遅れて、今頑張って導入しています(切実)。

ちなみにものすごくタイムリーに値上がりの噂が来ていますが、その価値はあると思います。
https://www.getdbt.com/blog/dbt-cloud-package-update/

コミュニティに参加しよう

Snowflakeはコミュニティ活動に割と力を入れているので、イベントなども定期的に開催されています。
https://usergroups.snowflake.com/events/details/snowflake-japan-presents-snowflakehong-tsuteyou-beru-buildlocal-tokyo-legend-of-the-data-heroesri-ben-chu-wu-li-komiyuniteiibento/

ひとまずTwitterにて以下のアカウントをフォローして、出てくるイベントに参加したり登場人物に絡んだりしていると、徐々にコミュニティに参加していくことができます。
https://twitter.com/SnowflakeDB_jp

すごくすごい速さで追加されていく新機能や、それに伴い変化するベストプラクティスにキャッチアップするためにも、是非コミュニティに参加しましょう。

情報を発信しよう

Snowflakeの現状の課題として、特に 日本語の情報が少ない ことが挙げられます。
なので、自分のうまぶりややらかしを積極的に発信すると、皆さまが非常に喜びます。

是非自分の好きな方法で発信していってください。

私のオススメの方法は、 同人誌かなーやっぱw
https://zenn.dev/kommy339/articles/3ab69145ab6f31

是非自分の好きな方法で発信していってください(大事なことなので2回言いました)。
俺もやったんだからさ(同調圧力)

結びの言葉

そういうわけで、Snowflakeを導入したてにまずやることの一覧として、参考になりましたら幸いです。
個人的には今年はすごくすごい推せるサービスに出会えた楽しい一年でした。

最後に一つ宣伝を。
私が所属する株式会社GENDAでは一緒に働く仲間をすごくすごい真剣に求めています。
興味がありましたらぜひお気軽にお声おかけください。
https://genda.jp/

本日はこのあたりで。
それじゃあ、バイバイ!

Discussion