株式会社MIXIにおけるdbt導入事例
株式会社MIXI / 渡辺大貴
メンバー / データエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 301名〜500名
利用プラン | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|
dbt Core | 10名以下 | 2022年7月 | B to C |
利用プラン | dbt Core |
---|---|
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2022年7月 |
事業形態 | B to C |
アーキテクチャ
アーキテクチャの意図・工夫
- Google Cloudにおけるdbtの実行インフラとしてはCloud Buildを採用。Cloud Buildは本来はCI/CDなどに使われるサービスだが、導入当初(2022年)はDockerコンテナを実行するいい感じのサービスが無かったためこれを採用した。2024年の今ならDockerコンテナはCloud Run Jobsなどで実行するのが良さそう。
- dbt自体はETL/ELTにおけるTransform部分しか担当しないため、複雑なData Extractionは別サービスで担当。共通基盤側ではなるべくデータの前処理をせずにBigQueryへロードするだけで済むようなアーキテクチャを採用した。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
- プロダクトごとに採用しているワークフローエンジンが異なるため学習コストが高く、結果的に運用が属人化してしまう課題があった
- すでに採用しているワークフローエンジンではDWH(BigQueryなど)との通信部分を自前で実装していたためメンテナンスコストが高く、新機能を利用したいときも追加で実装する必要があった
- 各プロダクトのアップデート対応(新規施策に伴うデータ取り込み、ログ解析など)も工数が高かった。特に内製ワークフローエンジンやLuigiではSQLの他にPythonやRubyなどの言語の知識も求められたためエンジニア以外のメンバーが自力のみでデータマートを構築しずらい状態になっていた
どのような状態を目指していたか
- データ分析基盤のアーキテクチャや利用しているツール・サービスが統一されている状態。分析基盤をサービスごとに作っていたら大変なので今後は共通化したい。
- ドメイン(SQL)のみに集中できる状態
- データアナリストなど非エンジニアでも気軽にデータマートを作成できる状態
比較検討したサービス
- dbt Cloud(SaaS)
- dbt Core(OSS) <- 採用
- Airflow(Google Cloud Composer)
- Prefect
- Luigi
比較した軸
今現在抱えている課題を解決できるか、チームメンバーのスキルセットとの親和性を重要視していました。
選定理由
※前提としてdbtはETL/ELTにおけるTの部分のみを担うツールです。データマートの構築パイプラインをどのツールが担うのかを観点に比較しました。複雑なワークフローにおいてはAirflow上でdbtを動かすなど組み合わせて利用するケースが多いです。
- BigQueryへjob(SQL)を投げるだけなら最適なツールである点
- 複雑な環境構築不要でローカル環境でさっと開発できる点
- SQLを書くことに集中できる点
- 学習コストが比較的低い点
dbt Cloudではなくdbt Core(OSS版)を選んだ理由としては、すでに他のワークフローエンジンを動かすための基盤をチームで運用していたためSaaSでなくても導入のコストが低かった点、導入当時はdbt Coreが持つ機能で十分に要件を満たせた点が決め手でdbt Coreを採用しました。
導入の成果
改善したかった課題はどれくらい解決されたか
プロダクトごとに採用しているワークフローエンジンが異なるため学習コストが高く、結果的に運用が属人化してしまう課題があった
dbtを中心とした共通基盤を構築。新規プロダクトはこの基盤に乗っかることで7タイトルを超えるプロダクトの分析環境を支えることができた。
すでに採用しているワークフローエンジンではDWH(BigQueryなど)との通信部分を自前で実装していたためメンテナンスコストが高く、新機能を利用したいときも追加で実装する必要があった
通信部分はすべてdbt側が担ってくれるため、メンテナンスコストは大幅に下がった。
各プロダクトのアップデート対応(新規施策に伴うデータ取り込み、ログ解析など)も工数が高かった。特に内製ワークフローエンジンやLuigiではSQLの他にPythonやRubyなどの言語の知識も求められたためエンジニア以外のメンバーが自力のみでデータマートを構築しずらい状態になっていた
dbtの場合ドメイン(SQL)のみに集中できるため、dbtをあまり知らない人でも新しいデータマートの構築などができた。
どのような成果が得られたか
先述の通り7タイトルを超えるプロダクトにおいて安定して分析用データを提供する基盤を構築することができた。 またdbtの採用により今までデータエンジニアしかさわれなかったワークフローエンジンがデータエンジニア以外でも触れるようになった。(実際にサーバー側のエンジニアからもdbtモデルを追加するPull Requestが来るなど属人化・サイロ化を防ぐことができた)
導入時の苦労・悩み
dbt Core自体をどこで動かすかは議論の余地がありました。また、dbt自体はBigQueryなどのDWHへSQLを投げる以外の機能を持たないためそれ以外のワークフローをどこで実行するかは依然として設計する必要がありました。
導入に向けた社内への説明
上長・チームへの説明
技術選定においてはそれぞれのツールを実際に動かしてみて開発体験や機能性をチェックしました。また、チームメンバーとモブプロなどを通じてツールを触ってもらうことでツールへの理解を深めた上で導入の意思決定をおこないました。
活用方法
よく使う機能
- dbt runコマンドによるモデルの実行
- dbt testコマンドによるGenericテストの実行
- dbt docsコマンドによるデータカタログページの生成
ツールの良い点
- 複雑な環境構築不要でローカル環境でさっと開発できる点
- SQLを書くことに集中できる点
- 学習コストが比較的低い点
ツールの課題点
- (ツールの課題というよりは役割の違いですが)dbtはあくまでもETL/ELTにおけるTの部分しか担当しないのでクエリを投げる以外のことはできない・向いていない
- Pythonでマクロを書くことが可能だが、導入当初の2022年には仕様が公式ドキュメントにはあまりまとまっていなかった
株式会社MIXI / 渡辺大貴
メンバー / データエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 301名〜500名
よく見られているレビュー
株式会社MIXI / 渡辺大貴
メンバー / データエンジニア / 従業員規模: 1,001〜5,000名 / エンジニア組織: 301名〜500名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法