Snowflake+dbtの開発環境をDockerコンテナで構築する
挨拶
株式会社ジンズのバックエンドエンジニア兼開発環境保全活動家の中島です。
今回は弊社のデータ分析基盤開発で利用している Snowflake+dbtの開発環境 のお話をします。
背景
2010年代より, 情報に基づいた意思決定を行うためのデータサイエンス, またその土台を支えるデータエンジニアリングの考え方は広く市民権を得てきました。
弊社JINSでも当然ながらビジネスを通して得られる情報を収集しており, これらを用いた経営指標の算出やデータの分析・示唆出し等を行っています。
このプロセスを実現するシステムとしてJINSでは Snowflakeとdbtを組み合わせたデータ分析基盤 を構築しています。
Snowflakeとは
Snowflakeとは米国Snowflake社が提供するSaaS型データクラウドプラットフォームです。
2023年から急速に台頭してきており, 日本国内でも様々な企業での導入事例が上げられています。
個人的な感触として, 技術面でのサポートやドキュメントが充実しており, かつコミュニティの構築に並々ならぬ力を入れているので, データエンジニアリングに関わる人はキャリアを構築する上で触れておいて損はない技術だと思っています!(宣伝)
dbtとは
dbtはデータエンジニアリングにおけるELTのT(Transformation:データの変換・加工)を強力にサポートするツールです。
モデルと呼ばれるクエリを記述し> dbt build
を実行することで対象データの変換・更新を一括で行ってくれます。
そしてなによりpython
やjinja
による動的な実装に対応しています。
これによって テーブル間の依存関係をモデルに埋め込む ことができ, かつその 依存を考慮しつつテーブルを更新 してくれる非常に便利な機能を有しています。
dbt Cloudというフルマネージドの運用クラウドサービスもあり, データ分析基盤運用における様々な"面倒くさい"を解消してくれる優れものです。
課題
さて, データ分析基盤に求められる要件として 運用の安定性 があります。
社内の情報を集約する以上, 様々な箇所で様々な利用がなされており, 止まってしまった場合の影響範囲は多岐にわたります。
一方で, 情報を集約するだけあって社内のほぼ全てのシステムから影響を受ける箇所, すなわち 様々な変更や障害の影響を受けるポイント ともなりえます。
そのため, メンテナンスのしやすさ・デバッグのしやすさ は 常に気を払うべき重要な要素 となります。
snowflake+dbtの開発環境の紹介
前述の課題を踏まえてsnowflake+dbtを動作させる 開発環境dockerコンテナのリポジトリ を作成しました。
それがこちら。
"開発環境の構築にかかる作業は可能な限り少なくシンプルにすべき" を信条としているので, 特にDockerを利用した開発環境コンテナを好んで利用しています。
開発環境構築作業を「dockerコンテナを立ち上げる」 ことのみに集約させることで
- 作業者間の環境差異を最小化できる
- データエンジニアリングに不慣れな開発者でもdockerさえ使えれば開発に着手できる
- 依存するアプリケーションやソフトウェアを一か所で管理できる
と色々と良いことづくめです。
使い方
基本的には
- 対象のdbtプロジェクトをサブモジュールとして取り込む
- クレデンシャル情報を.envに記述する
- dockerコンテナを立ち上げる
のみでdbtの開発を始められるようにしています。便利。
あとは通常通りdbtのモデルを変更し, コンテナの中で> dbt build
を実行してテーブルの更新を行うだけ。便利便利。
dbt Cloud IDEがあるやんけ
全面的にAgreeです。
dbt Cloudはブラウザ上から開発を行えるdbt Cloud IDEという機能を有しており, こちらを利用することで開発環境は簡単に構築できてしまいます。
実際に弊社でも現時点では, ほとんどの開発者にはdbt Cloud IDEを利用してもらっています。
しかし, dbt Cloud IDEはgit連携の微妙さや費用面での地味な痛さ(100 [$/month]), なにより ブラウザ上で動くエディタの使い勝手の悪さ から忌避したい思いが強くあります。
エンジニアの多くは, 秘伝のスニペットやショートカットが染み込んだエディタでないと満足な開発体験が得られないはず…
dbtを利用した開発を行っている方で, dbt Cloud IDE使いたくないという仲間がいれば, ぜひとも当記事で紹介したリポジトリを参考にしていただけると幸いです。
最後に
我々株式会社ジンズITデジタル部、社内では比較的若い部署ではありますが、少しずつ需要も規模も拡大していっています。そのため新たなエンジニアを随時募集しています。
- 大局を見ながらプロジェクトを運営してビジネスを動かしたい!という方
- 実際に動くシステムをバリバリ実装しながらベンダーさんと殴り合いたい!という方
どちらの志向でも活躍できる土壌があります。
興味ある方はぜひ、下記募集ページをご覧ください!
Discussion