株式会社High Linkのdbt導入事例
株式会社High Link / assy
開発部長 / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
利用プラン | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|
チームプラン | 10名以下 | 2022年5月 | B to C D to C |
利用プラン | チームプラン |
---|---|
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2022年5月 |
事業形態 | B to C D to C |
アーキテクチャ
アーキテクチャの意図・工夫
- Data Lake層:加工前のローデータを格納する
- Interface層:ソーステーブルと1対1で対応し、ソースに最低限の加工・整形を行ったテーブル
- Logical(論理インターフェース):VIEW で作成されたもので、基本的にはこちらを採用する
- Physical(物理インターフェース):TABLE で作成されたもので、interface 層をそのまま利用してもらいたい場合に例外的に作成することがある
- Component層
- Dimension:集計軸となるカラムを持つテーブル
- Fact:ビジネス上発生するイベント表すテーブル
- Warehouse層:Dimension・Fact テーブルを最低限の処理でシンプルに結合したワイドテーブル
- Mart層 : 特定の用途に利用するテーブル
導入の背景・解決したかった問題
導入背景
導入時の詳細については過去のブログにてご紹介しておりますので、こちらもご参照いただけますと幸いです。
dbtを導入して小規模チームでも運用可能なデータマネジメント体制を構築した話
ツール導入前の課題
Data WarehouseとしてBigQueryを採用し、データパイプラインを整備、BigQuery内のテーブルはコンソール上のスケジュールクエリで定義していました。
しかしながら、コンソール上で定義したテーブルが増えてくるに従い、次のような問題が露呈してきました。
- コンソール上でテーブル定義を自由にできてしまうため、クエリのレビューの仕組みがない(担当者同士がケアするしかない)
- テーブル定義の変更履歴を管理できない
- テーブル同士の依存関係のトラッキングが大変
- テーブル定義のドキュメントをアドホックに管理するのが大変
特に当時の運用ポリシーでは、事業の担当者がある程度自由にテーブルを増やすことができるようにしていたため、このまま野良のテーブルが増えていくと管理がますます難しくなることは目に見えていました。
こういった課題を解決するために、仕組みの改善が求められました。
どのような状態を目指していたか
当時やりたかったことは以下です。
- データモデリングをチームで管理できる体制を構築する
- テーブル定義をGitHub上で管理して、CI/CDの基盤を整える
- データリネージを構成する
- ドキュメントを自動生成する
比較検討したサービス
- dbt Cloud (マネージド版)
- dbt Core (OSS版)
- Dataform
比較した軸
- テーブル定義のコード管理やデータリネージの構成などやりたい機能が満たせるかどうか
- コスト面(ツールコスト・メンテナンスコスト)
選定理由
dbt も Dataform も機能要件は満たしていました。 しかしながら Dataform は当時 GCP への統合作業が進んでおり、新規サインアップを停止していたため dbt を選択しました。
dbt Core であれば OSS なので無料で利用できるというメリットはありますが、インフラを管理するリソース的な余裕はなかったためマネージドインフラを提供してくれる dbt Cloud を選択しました。
導入の成果
改善したかった課題はどれくらい解決されたか
1/ コンソール上でテーブル定義を自由にできてしまうため、クエリのレビューの仕組みがない(担当者同士がケアするしかない)
- dbtの導入と併せて、warehouse層/mart層のテーブルに関しては全てデータエンジニアリングチームが dbt で管理するようにし、野良のテーブルが乱立しないようにしました
- テーブル定義は GitHub 上で管理しているので新しいテーブルを定義する際には必ずコードレビューが入り、品質が担保されるようになりました
- また、dbt のテスト機能を活用することでデータ品質の担保もできるようになりました
2/ テーブル定義の変更履歴を管理できない
- GitHub 上のコミットログが残るようになったので解決しました
3/ テーブル同士の依存関係のトラッキングが大変
- dbt がデータリネージを構成してくれるので、upstream/downstream の影響範囲が明確になりました
- また、exposure を活用することでダッシュボードとテーブルの依存関係も可視化できるようになったので不要なテーブル削除オペレーションがかなりやりやすくなりました
4/ テーブル定義のドキュメントをアドホックに管理するのが大変
- テーブル定義の yml でカラム description を一緒にを定義できるようになり、これが自動的に BigQuery 上(Count 上)のコンソールに反映できるのでドキュメントの管理はかなりやりやすくなりました
- dbt で description を管理することをベースに、開発チームと連携したテーブル・カラム説明文の拡充フローも構築することができました(参考: スプレッドシートを活用して組織横断的にテーブル・カラムの説明文を入力した話)
- さらに、dbt-osmosis を利用することで上流モデルのカラム説明文を継承することができるようになったことで実装の手間がかなり削減されました
導入時の苦労・悩み
dbt の基本的な実装は SQL をベースとしているのでスムーズに理解できましたが、dbt 上でモデリングする上でのディレクトリ構成や、自分たちの出力先データセット環境に合わせたカスタムスキーマの設定など、自分たちの環境に合わせたカスタマイズをするのに一定キャッチアップが必要でした。
導入に向けた社内への説明
上長・チームへの説明
課題感の共通認識を取り、Solution としての dbt 導入のメリットについて理解してもらいました。 その上で、まずは個人アカウント(無料)ではじめてみて導入時の解像度を上げ、運用コスト含め課金してもペイできることを確認しました。 もし使ってみて微妙であれば取り下げることも可能なので、まずは運用してみようというコミュニケーションとセットで運用をはじめました。
活用方法
よく使う機能
- dbt build, run
--select tag:xxx
や--select state:modified+
といった実行対象の絞り込みはよく使います
- dbt snapshot
- データレイク層のテーブルのうち主要なものをスナップショット取るために使っています
- dbt (unit) tests
- unit tests はロジックのテストをするときに使っています
- Jinja / Macros
- 共通処理は macro を定義してコードを共通化しています
- dbt exposure
- Looker Studio, Google スプレッドシート に対してどのダッシュボードにどのテーブルが連携されているのか可視化するために使っています
- 定期的に exposure を自動更新するバッチを構築しています
- dbt_external_tables
- 追加パッケージ
- Google スプレッドシート等外部テーブルをdbt上で管理するために使っています
- dbt-osmosis
- 外部ツール
- カラム description を下流に伝搬させるために使っています
- osmosis を実行するときは local 環境の dbt core を使います
- elementary
- 外部ツール
- 各モデルの実行時間やテスト結果のモニタリングやテスト項目の追加、BQ に dbt 管理対象のテーブルリスト作成するといった用途で使っています
ツールの良い点
- 周辺ツールやパッケージが豊富で dbt を中心に実現できることの幅が広い(開発も盛ん)
- コード内で Jinja を利用できるので SQL で記述するのが大変なロジックも実装しやすい
- 無料で試すことができる
ツールの課題点
- dbt cloud (Team plan) は人数課金&一人あたりの料金が高い
- やれることの幅が広い反面、複雑なことをしようとすると学習コストがかかる(詳しい人がいるといないとで差が出てきそうです)
ツールを検討されている方へ
無料で使い始めることができますし、ドキュメントもたくさんあるのでまずは使ってみて実際の運用イメージを掴んでいただくのが良いかと思います。
今後の展望
dbt を軸とした開発・運用のフローを整備することでチームでのデータマネジメントは格段にやりやすくなりました。
今後は引き続き事業成長を加速させるためのデータ基盤整備を進めつつ、重要なデータに関しては unit tests や anomaly detection tests (elementary を導入することで利用可能) を拡充しデータ品質の向上を目指していきます。
株式会社High Link / assy
開発部長 / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
よく見られているレビュー
株式会社High Link / assy
開発部長 / EM / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法