ラクスル株式会社のdbt導入事例(ダンボールワン編)
ラクスル株式会社 / Eisuke-Umeda
チームリーダー / データエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
利用プラン | 利用機能 | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|---|
dbt core | モデルの構築、実行順序の制御、モデルのテスト、dbtプロジェクトのドキュメンテーション | 10名以下 | 2022年2月 | B to B B to C |
利用プラン | dbt core |
---|---|
利用機能 | モデルの構築、実行順序の制御、モデルのテスト、dbtプロジェクトのドキュメンテーション |
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2022年2月 |
事業形態 | B to B B to C |
アーキテクチャ
アーキテクチャの意図・工夫
- Data Warehouse
- Data Warehouse は BigQuery を採用
- ラクスルグループでは Snowflake を採用しているケースもあるが、今回は Googleスプレッドシート や Looker Studio といった BI環境との接続性を重視
- Data Warehouse は BigQuery を採用
- BI
- BI環境は Googleスプレッドシートのコネクテッドシートをメインに、Redash や Looker Studio利用とコスパフォーマンスを重視
- ELT
- Extract & Load
- Aurora PostgreSQL to BigQuery の Extract & Load は内製
- Aurora MySQL to BigQuery を OUTFILE S3 で行う内製ツールがすでにあったので、PostgreSQL向け対応のみで済むため
- Aurora PostgreSQL to BigQuery の Extract & Load は内製
- Transform
- Transform 部分(Lake から Warehouse/Mart を作る部分)に dbt を採用
- Extract & Load
- データモデリング
- ディメンショナルモデリング(スタースキーマ/スノーフレークスキーマ)や Data Vault ではなくワイドテーブルを採用
- 非エンジニアが分析する上でJOINが一つのハードルとなるが、分析に必要なデータを予め1つのテーブルにJOINしておくことでその問題を解消
- 冗長的に持つことによる性能や金額の問題はもうない
- SQLを書かずにGoogleスプレッドシートでコネクティッドシートを利用してBigQueryの1つのテーブルに接続してピボット分析することで大抵の分析ができるようにしている
- 顧客、注文、注文商品という3つのテーブルがある場合、注文には顧客を包含、注文商品には注文を包含することで、分析する際はどの単位で分析するかによってテーブルを1つ選択し、それを見るだけで大抵の分析ができるようにしている
- 顧客には初回注文日や合計売上等の良く利用するサマリデータも保持している
- 顧客、注文、注文商品という3つのテーブルがある場合、注文には顧客を包含、注文商品には注文を包含することで、分析する際はどの単位で分析するかによってテーブルを1つ選択し、それを見るだけで大抵の分析ができるようにしている
- 大量カラムによる構造が良くわからなくなるデメリットは、BigQueryのStruct型を活用して構造を可視化することで軽減
- lake と warehouse/mart の間に component層を設け、component層は正規化されたテーブルで作成し、 warehouse/mart 生成時に非正規化している
- SQL書ける人向けにはcomponent層もアクセス可能にしている
- dbt では staging レイヤーの利用 が推奨されているが、現時点ではレイヤー分けは必要最小限(DRYであればOK)の方針としている
- 今後処理が複雑化してきた場合にはレイヤー分けを見直すかも
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
ラクスルグループには子会社も含めて複数事業が存在し、セキュリティ境界を設ける形でデータ基盤を開発・運用しています。買収によりダンボールワンがラクスルグループに加わり、データ基盤を整備した2022年当時の導入背景になります。 dbt導入以前のデータ基盤ではJenkinsを使って実行順序を制御し、SQLの本数が多く、依存関係も複雑なため、以下のような課題がありました。
- 依存関係が複雑なため、新規参画したエンジニアの学習コストが高い
- 追加・変更したSQLを自動テストする仕組みがなかったため、動作確認に時間がかかる、確認漏れが発生する恐れがある
どのような状態を目指していたか
ツール導入前の課題を解決することを目指していました。
比較検討したサービス
- Dataform
比較した軸
- 容易に導入できるか
- データパイプラインを構築するための学習コストが低いか
- BigQueryの固有処理に対応しているか
- 承認済みビューの作成
- ポリシータグの付与
選定理由
- SQLの知識があればデータパイプラインを構築できる
- SQLで定義したモデルはrefと呼ばれるテーブル間の関係性を自動的に把握できるようになる仕組みで記述することで、DAG(有向非巡回グラフ)を考慮したデプロイを実行できるため、モデルを反映させるための細かなワークフローを組む必要がない
- モデルによって生成された結果にアサーションを行うことで、各モデルのSQLの整合性を向上させる方法が提供されている
- ベンダーロックインを回避できる
- 将来BigQuery以外のDWHを使うことになった場合、ある程度容易に移行が可能である
導入の成果
改善したかった課題はどれくらい解決されたか
ツール導入前の課題は解決することができました。
どのような成果が得られたか
- 依存関係が複雑なため、新規参画したエンジニアの学習コストが高い
SQLを書くだけで良く、SQLの知識があればパイプラインを構築できるため、学習コストが下がりました。 また、dbt docsでドキュメント生成することでデータリネージを確認することができるようになったため、依存関係のが把握しやすくなりました。 dbtの学習コストはあるものの、コストはそこまで高くはない印象です。
- 追加・変更したSQLを自動テストする仕組みがなかったため、動作確認に時間がかかる、確認漏れが発生する恐れがある
dbt testにより、モデルによって生成された結果にアサーションを行うことで、各モデルのSQLの整合性を向上させることができました。 例えば、他モデルとの行数一致をテストすることで、JOINミスによる行落ち、行膨れを防ぐことができるようになりました。
導入時の苦労・悩み
- BigQueryの固有処理ヘの対応
- 導入当時は外部ソース(Spread, GCS)のexternalテーブル作成ができなかったため、内製スクリプトを事前実行していた
- 現在ではdbt-external-tablesを用いてexternalテーブル作成するようになっている
導入に向けた社内への説明
上長・チームへの説明
責任者主導で検証を重ねて導入に至ったため、スムーズに導入することができました
活用方法
よく使う機能
- dbt run
- dbt-external-tables
- dbt test
- dbt docs
ツールの良い点
- SQLの知識があればデータパイプラインを構築できる
- データリネージがわかりやすく可視化される
- SQL内に軽量なテンプレート言語であるJinjaを使うことができるため、制御構文(ifやforなど)を使用することで SQL を簡潔にできる
- モデルによって生成された結果にアサーションを行うことでSQLのテストが可能
- 基本的なテストはモデルのYAMLに定義するだけで実行可能
- 環境構築・実行が容易
- BigQueryの固有処理にも対応しているものがある
- 承認済みビューの作成
- ポリシータグの付与
- Dagster が公式で dbt 連携をサポートしていて相性がよい
ツールの課題点
- BigQueryの固有処理には対応できていない部分があることもあり、dbt とは別に前後のジョブ実行がある
- UDFの依存関係は管理できないのでコード記載順序で担保
- データセットのアクセス制御ができないので、事後処理で内製スクリプトを実行している
- 非正規化を多様したワイドテーブルのデータモデルとしたこともあり、BigQueryのメタデータ更新をdbtのYAML管理するのが面倒なため、GoogleスプレッドシートをINPUTにして更新する内製スクリプトを事後実行している
今後の展望
dbtを導入して2年半経ちますが、データパイプラインの開発がかなり楽になったと感じています。 一部のデータ基盤については、まだdbtに移行できていませんので、2024年内に移行を完了させたいと考えています。
ラクスル株式会社 / Eisuke-Umeda
チームリーダー / データエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
よく見られているレビュー
ラクスル株式会社 / Eisuke-Umeda
チームリーダー / データエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法