ナウキャスト: dbtの導入でデータのサイロ化解消と開発スピード向上を実現
株式会社ナウキャスト / tsoshiro
チームリーダー / データエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|
11名〜50名 | 2022年12月 | B to B |
ツールの利用規模 | 11名〜50名 |
---|---|
ツールの利用開始時期 | 2022年12月 |
事業形態 | B to B |
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
ナウキャストではクレジットカード、POSデータ、求人広告データなど多種多様なデータを扱っています。dbt導入前は、S3 + AthenaベースのPython ETLを中心としたパイプラインを構築していましたが、以下の問題がありました。
- データソースごとに別々のチームが独立したパイプラインを構築しており、知見が共有されづらく、同じような機能を別々で開発するようなことが起きる(いわゆるサイロ化)
- パイプラインごとに微妙にアーキテクチャが異なる上、データカタログやリネージュが未整備で全体像の把握が難しい
- 異なるデータソースを組み合わせた横断的な分析が非常にしづらい
これらの問題を解決するため、Snowflakeとdbtを中心としたDWHによるELTパイプラインを構築することにしました。 本基盤に関するSnowflake中心のレビューはこちら: Snowflake と dbt / Terraform を組み合わせモダンなデータ基盤を構築
どのような状態を目指していたか
目指したのは、データパイプラインの統一基盤と環境分離の徹底、そしてデータ品質・系統管理の強化です。これに合わせてデータ基盤開発を専門に担うプラットフォームチーム(DSPU: Data Service Platform Unit)も新設し、全社的なデータ利活用を下支えする体制を整えました。
比較検討したサービス
- dbt-core(採用)
- dbt Cloud
- Dataform
比較した軸
- 既存のデータ基盤(AWS)を活用できること
- アップデートされ続けており、コミュニティが活発であること
- 費用面
選定理由
- 既存のデータ基盤がAWSなので、Dataformは対象外
- dbt-core vs dbt Cloudでは、OSSで利用料自体はゼロであること、データエンジニアが多くdbt-coreを使い込むことで小回りの効く開発ができるようになるであろうことから、dbt-coreを採用しました
導入の成果
業務面での具体的な効果として、社内の新規データプロダクト開発が格段にスピードアップしました。実際、このSnowflake×dbt環境を用いて 「HRog賃金Now」 という統計データプロダクトをゼロから開発した際には、従来比で圧倒的に迅速なサイクルで実装・改良を進めることができました。 従来であれば各種データの加工集計に時間を要したり、断片化したパイプラインの調整に手間取ったりしていたところ、統一基盤上でコードを書くだけで一連の処理を完結できるためです。
品質面でも、データの検証が自動化された恩恵は大きく、プロダクトに組み込むデータの信頼性が向上しました。例えばdbtのテスト機能により、「このテーブルの主キーはユニークかつNULLでないか」といった制約チェックを組み込んでおけば、開発時に即座に異常値を検知できます。実運用においても常に最新データに対しテストが走るため、不整合があればすぐに発見・対処可能です。データ品質の担保が仕組み化されたことで、分析結果や提供データへの信頼性が飛躍的に高まりました。
組織面では、データエンジニアリングの知見が集約されたことでチーム間の連携が強化されました。以前はデータソース単位で閉じた開発をしていましたが、今はプラットフォームチームを中心に横断的なノウハウ共有が進み、メンバー各自が標準化された手法で開発できています。
導入時の苦労・悩み
- Snowflake・dbt・Terraformを中心とした新たなデータ基盤を運用するノウハウの確立と普及に苦労しました。Snowflakeとdbtは多くのメンバーにとって新しいものでしたし、Terraformは利用してはいたものの、Snowflake Providerならではのハマりどころなどもあり、メンバーが新しいデータ基盤上でスムーズに開発できるようになるまで苦労していました。これらの問題については、プラットフォームチームが勉強会やドキュメントの整備に時間を割いたり、比較的余力のあったチームと一緒にユースケースを作り、他のチームはそのコードベースを参考に開発するように少しずつサポートする、といった工夫をして解決しました。
導入に向けた社内への説明
上長・チームへの説明
- dbt-coreの導入自体にコストはかからないため、特に上長への説明はしていません。(Snowflakeの導入に関しては別途説明)
- 一方で、これまでPython ETLがメインだったところからDWHによるELTに切り替えることは、メンバーにとってはコードベースやパイプライン構築手法の大幅な転換を求めるものでした。そのため、丁寧な説明とサポートを行いました。
活用方法
- 社内のデータパイプライン開発の基盤として、社内のデータエンジニアはほぼ毎日使用している。
- S3にファイルを配置したファイルをdbt-external-tablesを使用して外部テーブルとして定義してSnowflake環境に読み込み、以降のパイプラインは本開発基盤上で開発している。
- ソースコードはすべて一つのGitHubリポジトリで管理。デプロイやテストはデータソース(あるいはプロジェクト)単位で独立して行われるよう、GitHub ActionsによるCI/CDが整備されている。
- ワークフローエンジンであるAirflowから、dbtコマンドを実行するECS Taskをキックし、定期的にSnowflake上のテーブルが更新される。
よく使う機能
- dbt build/dbt run-operation stage_external_sources/dbt testなどの基本コマンド
- 開発時はローカルからdbtコマンドを実行することが多い。
- 開発/本番環境にワークフローエンジンとしてAirflow、dbtの実行環境としてECS Task、ECRを利用している。
ツールの良い点
- SQLベースで高速なイテレーションが回せる
- 宣言的にパイプラインを書くことができ、コードが分かりやすくなる
- 余計なコードが減り、パイプラインのロジックに集中できる
- Python ETLでは、本質的ではない処理も多く書く必要があった
- 環境分離とCI/CDが容易に実装できる
- テストによるデータ品質の担保
- テーブルやカラムの説明やリネージュなどのメタデータ管理の促進
ツールの課題点
- 効率のよい開発のためには、dbtの理解に加えDWH(Snowflake)の特性の理解の両方が必要。パーティションやクラスタリングなどの仕組みを意識しないと、コストやパフォーマンス面での問題が発生する。例えば、incremental modelを採用しているがフルスキャンになってしまっているモデルなどがあり、コスト増の原因に。
- dbt testによりデータの内容をチェックする仕組みは整っているが、pytestのようなロジックを検証するテストはまだ書きにくい。
- dbt python modelはPythonをdbtの世界で使用できるが、まだ一部使いづらさを感じるところがある。
株式会社ナウキャスト / tsoshiro
チームリーダー / データエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
よく見られているレビュー
株式会社ナウキャスト / tsoshiro
チームリーダー / データエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- 導入の背景・解決したかった問題
- 活用方法