Retty株式会社のdbt-coreとdbt Cloudの導入事例
Retty株式会社 / Hiroki Igeta
メンバー / データエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 11名〜50名
利用プラン | ツールの利用規模 | ツールの利用開始時期 |
---|---|---|
チームプラン | 10名以下 | 2022年1月 |
利用プラン | チームプラン |
---|---|
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2022年1月 |
アーキテクチャ
アーキテクチャの意図・工夫
- ワークフローの定期実行は dbt Cloud の機能を採用しています。
- SQLの入力規則チェックは、開発環境からPullRequestを作成した際に CircleCI で SQLFluff (SQLのリンター)を実行してチェックしています。
- dbt docs を S3 に配置し、社内向けにホスティングしています。
- Rettyにて、DWHの管理を内製ツールからdbtに移行した話をTech Blogにまとめているので、よかったらご一緒に参照ください。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
1. 内製ツールの不具合が多く、復旧に時間がかかる
これまでは内製ツールを利用していましたが、ツールの作成者やソースコードを熟知しているメンバーの退職により、メンテナンスが十分に行われていない状態でした。
そのため、内製ツールで不具合が発生した際の復旧に時間がかかる等、ブラックボックスが多い状態となっていました。
2. データ分析基盤内に問題が起きた際、原因特定に時間がかかる
Rettyでは2020年から「分析の民主化」を掲げ、データウェアハウスやデータマートが数多く作成されていました。テーブル量も多くなっているうえに、テーブル同士の依存関係を把握するための可視化もされていない状態でした。
したがって、プロダクトやセールスの各部門から、ダッシュボードやテーブルのデータに関する質問が発生した際に、クエリを読んで辿るしか方法がなく、原因特定に時間がかかり、日々の分析業務(意思決定支援)の進行が遅れる形で徐々に課題が顕在化していました。
3. データマネジメント職種の採用の難しさ
Rettyでは既にある程度、データ分析基盤を含むデータパイプラインは整備されていたものの、事業のフェーズとともに分析要望の幅や複雑性が増し、開発や運用をアップデートするニーズが継続して発生している状態でした。
しかし、データパイプライン全体の見直しを行う場合、一定のエンジニアリング知識が必要となることが予想され、1や2で記載した課題やその他の業務と並行しての対応や、データエンジニアやアナリティクスエンジニアを採用し組織立てていくためのリソースの確保が難しい状態でした。
そこで、dbtを導入することで「DWHの管理を内製ツールから置き換え、開発効率を向上させる」ことを目標とし、データアナリストが中心に内製ツールからdbtへの移行を進めることにしました。
導入の成果
dbt-core と dbt Cloud の導入により、内製ツールを使っていたことで生じていた不安感の払拭と、データ分析基盤の開発生産性の向上と問題発生した際の原因特定の効率向上を実現できました。
実際に、新しく入ったデータマネジメントの業務委託メンバーがday1から基盤開発に関わることができ、導入の効果を実感しました。
また、BIツールとしてdbtのYAMLファイルを元に開発・運用が行えるLightdashの採用にも繋がり、BIツールの開発生産性と保守運用の向上・利用コスト削減も実現できました(詳細は、Lightdashのレビュー記事をご参照ください)。
導入時の苦労・悩み
YAMLファイルでのテストの記述方法
dbt標準・dbt_utilsに具体例が載っていないテストの実装を行う際のエラーハンドリングに時間がかかったことがありました。
(例.クォーテーションマークやカッコを入れる箇所が誤っていたり、そもそも入れ損ねていたりしました)
※現在はドキュメントやノウハウ記事が充実していたり、CopilotやAIエージェントなどを活用しやすくなっていたりするため、エラーハンドリングにかかる時間が短縮しやすくなっていると思われます。
dbtへ移行前の環境で使っていたデータセットの削除
dbt移行に伴いデータセット名の命名規則を変更しました。
新環境と旧環境を並行稼働させる期間を設け、データ分析基盤利用者へ新環境への移行を促したものの、抜け漏れが発生しアドホッククエリやバッチクエリでエラーが生じる事態が発生し、関係各所への事前の共有やチェックを念入りに行う重要性や、dbtで依存関係を管理できるようになることのありがたみを実感しました。
dbt移行のための工数確保
dbtへの移行はデータアナリストが担っていたため、主業務のデータ分析と並行してdbt移行も進める必要があり苦労しました。
各メンバーが依頼者と合意を取った上で、dbt移行のための日(dbt開発day)を週1日確保することでプロジェクトの進捗を生みやすくなりました。
導入に向けた社内への説明
上長・チームへの説明
上長含めデータチーム内では「ツール導入前の課題」に記載の課題感の共有がなされており、技術検証にて課題解消の手応えも持てていたため、「データの民主化」を引き続き進めるためにもdbtを導入する合意はスムーズに得られました。
活用方法
よく使う機能
1. スケジューリング機能(dbt Cloud)
- dbtコマンドの実行をスケジューリングし、テーブルの定期更新やスナップショットの作成、テストによるデータ品質のチェックを行っています。
2. dbt docs 機能(dbt-core)
- テーブルに不備の調査やdbt modelの新規作成やロジック更新を行う際に、依存関係の確認等の用途で活用しています。
ツールの良い点
dbt-core
- オープンソース: 無料で利用可能であるうえ、コミュニティによるサポートが充実している点
- power user for dbt のようなVisual Studio Codeの拡張機能 や、dbt_utils・dbt-osmosis などのパッケージとの相性が良い点
- バージョン管理: Gitと連携してデータモデルのバージョン管理が可能な点
- dbt docs: データモデルのドキュメントを自動生成し、データリネージ(依存関係)を可視化できる点
- メタデータの入力をするインセンティブが発生しやすくなった点
- Jinja: PythonのJinjaテンプレートを利用できる点
- 変数の代入やfor文、Macrosなどを使ってSQLを柔軟に記述することができる点
- データの信頼性向上: テストの作成や更新が行いやすい点(unique, not_null, accepted_values など)
dbt Cloud
- スケジューリング機能: dbtコマンドの実行をスケジューリングし、テーブルの定期更新やスナップショットの作成が行いやすい点
- Lineage機能: ダブルクリックで依存関係のあるdbt modelのファイルにジャンプできる点
- 簡単なセットアップ・CI/CD機能: IDEのセットアップが簡単で、インフラ管理の手間やCI/CDを任せられる点
- コマンド呼び出し: ボタンクリックで表示・編集を行っているdbt modelに対してコマンドを実行できる点
- エンジニアリングのバックグラウンドがない人のオンボーディングや開発の効率化に繋がりやすい点
- (Explore機能: dbt model のヘルスチェックや、カラム単位のリネージを確認できる点 ※現状、活用できてないため今後活用したい)
ツールの課題点
dbt Cloud
- IDE機能: Visual Studio Codeと異なり、複数ファイルをsplitして表示・編集することができない点
- Lineage機能: dbt model名が長い場合、文字列が切り詰められて表示され判別が行いづらい点
※ファイル名の判別を行いつつLineageを確認したい場合は、dbt docs を活用することができるので大きな課題ではないです。 - スケジューリング機能: エラー時のSlack通知でメンションを行えない点、再実行を行う場合はGUIもしくはAPIを活用する必要がある点
※APIを活用することで、Slackのメンションやエラーが起きているdbt modelの確認などカスタマイズ性は高い点はありがたく感じています。
Retty株式会社 / Hiroki Igeta
メンバー / データエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 11名〜50名
よく見られているレビュー
Retty株式会社 / Hiroki Igeta
メンバー / データエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法