dbt 初学者向けに基本的な使い方やディレクトリ構成についてを説明します
dbt ベストプラクティス完全に理解したdach@
View Slide
自己紹介Belong Inc.チキン南蛮エンジニア @dachやってることデータ分析基盤入荷検査消去差配中古スマホBelongblog Youtube
Agenda1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する 3. テストについて理解する ※ 所要時間 30 min 程度を想定 (LT...?)
Agenda1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する 3. テストについて理解する ※ 所要時間 30 min 程度を想定 (LT...?) 近日ブログにて公開予定
本編に入る前に...実は #29 の時に「dbt 完全に理解したい」という内容で話していたことがあった知識 0 状態からアップデートした知見を共有できれば
Agenda1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する ※ 所要時間 30 min 程度を想定 (LT...?)
dbt の基本要素と動かし方を理解する[Section Topic]1. jaffle_shop で学ぶ dbt2. 抑えておいたほうがいい用語解説3. 実践 dbt 実装
Overview[この章の目的]● 難しいことはさておき、 dbt について完全に理解する[この章で学べること]● dbt はどういうツールであるか● dbt を利用した実装の仕方● dbt の基本的な使い方やよく出る用語
[データ分析基盤初心者向け補足情報 ]1. データ分析基盤の全体像2. ELT(ETL) について3. dbt とは[本編]1. jaffle_shop で学ぶ dbt2. 抑えておいたほうがいい用語解説3. 実践 dbt 実装Section Topics
DataSourceデータ分析基盤の全体像DWHSource 1Source 2Source 3BI toolsアプリ生データ蓄積データ加工抽出抽出完全性チェックデータ保持分析結果算出分析素材
データ分析では、様々な DataSource (社内アプリや SaaS など) のデータを利用する必要があります。データ分析ができるように、サイロ化された場所からのデータ移動や加工が必要です。ELT(ETL) について元のソースからデータを取得することを指します利用される宛先に移動することを指します標準化や整形、など分析が可能な形式にすることを指しますExtract(抽出)Load(移動)Transform(変換)
dbt は、データ分析の領域における 「Transform」 を行うためのツールです。SQL ファーストの変換ワークフロー であるため、学習コストが低いことが特徴です。dbt とは?元のソースからデータを取得することを指します利用される宛先に移動することを指します標準化や整形、など分析が可能な形式にすることを指しますExtract(抽出)Load(移動)Transform(変換)T におけるデファクトスタンダード
● dbt は、モジュール性、移植性、CI/CD、ドキュメントなどのソフトウェア エンジニアリングのベスト プラクティスに従って、チームが分析コードを迅速かつ共同で展開できるようにする SQL ファーストの変換ワークフロー ● DWH 構築の ELT/ETL 処理における 「 T (Transform)」を担当 ● Transform におけるデファクトスタンダードと言っても過言ではない ● ほとんどの Modern Data Stack との連携が可能 https://www.getdbt.com/product/what-is-dbt/ dbt とは?
[データ分析基盤初心者向け補足情報 ]1. dbt とは?2. データ分析基盤の全体像3. ELT(ETL) について[本編]1. jaffle_shop で学ぶ dbt2. 抑えておいたほうがいい用語解説3. 実践 dbt 実装Section Topics
以下のサンプルユースケースを実現するテーブルを作ること● サンプルユースケース○ 顧客別にまとまった、最新の注文情報・支払い状況を確認するSection Goal
Q. jaffle_shop とは?A. dbt のチュートリアルで使われる、架空の e コマースストア● Repo URL○ https://github.com/dbt-labs/jaffle_shop● こんな感じのデータが揃っているjaffle_shop で学ぶ dbt
リポジトリ開くとこんな感じjaffle_shop で学ぶ dbt
Q. サンプルユースケースを実現するために何をすれば良い?A. 動かせばユースケースを実現するテーブルが勝手に作れます[動かし方]1. dbt を install2. 所定の DB に接続するための設定を行う3. サンプルデータを入れる4. dbt を実行するjaffle_shop で学ぶ dbt
出来上がったものがこちらjaffle_shop で学ぶ dbt
データの流れ(Data Lineage)だとこんな感じjaffle_shop で学ぶ dbt
# 接続の確認% dbt debug# サンプルデータの投入% dbt seed# テーブルの構築% dbt run# さっきの図を作る% dbt generate% dbt serve実際のコマンドだとこんな感じjaffle_shop で学ぶ dbt
● dbt で作られたプロジェクトなら、簡単にテーブルを管理できます● dbt run を実行するだけでテーブルが作られます● 初めてのときは dbt の install や接続先の設定をする必要がありますjaffle_shop で学ぶ dbt: まとめ
今回の LT の中でも登場する dbt の用語にピックアップして説明します● モデル○ dbt で行うデータ変換処理を指します○ ざっくりいうと、「1 SQL ファイル = 1 モデル」です● マテリアライゼーション( materialization)○ dbt においてモデルを保持する方法の選択肢のことです○ v1.5.x 時点で選択肢は 4つあります○ 後で説明します抑えておいたほうがいい用語解説
dbt の実装は至ってシンプルですクエリを書く!!具体的なモデルを見ていきます実践 dbt 実装
「顧客別にまとまった、最新の注文情報・支払い状況を確認する」を実現しているモデル実践 dbt 実装
[要素]ref● 事前定義されているマクロ● 定義済みモデルを参照する● Data Lineage 図で紐づくだけじゃなくて、環境差分とかもいい感じに解消してくれる● e.g. dev-dach-test -> prod-dach-test実践 dbt 実装 データを引っ張ってくる関心毎に分けて集計集計結果を結合
● クエリを書く● 管理ができるように関心事で処理を分ける実践 dbt 実装: まとめ
Layer 構成と責務の分割について理解する[Section Topic]1. materialization を理解する2. コンサーンでディレクトリを分離する
[この章の目的]● モデルを作るときに気をつけること理解する[この章で学べること]● モデルの永続化について● ベストプラクティスに則ったディレクトリ分割Overview
1. materialization を理解する2. コンサーンでディレクトリを分離するSection Topics
全部で4つあります (v1.5.x 時点)これらをモデルに選択することでどのようにモデルを保持するかが決まります。1. view2. table3. ephemeral4. incrementalmaterialization を理解する
1. viewa. view テーブルb. 実行ごとに View として再構築されるc. 常に最新データが参照可能で、モデルの修正がすぐに反映されるd. ただし、参照のたびにクエリコストが発生する2. table3. ephemeral4. incrementalmaterialization を理解する
1. view2. tablea. モデルを実体化して持つb. 実行ごとにデータが再作成されるc. 結果を直接参照できるため、分析ツールや macro からの利用が容易d. 更新が必要な場合には手動で再実行する必要がある3. ephemeral4. incrementalmaterialization を理解する
1. view2. table3. ephemerala. 実行時に一時テーブルとしてモデルに組み込まれる (CTE)b. = WITH 句c. クエリの複雑性を分離できるd. デバッグが困難になる可能性がある4. incrementalmaterialization を理解する
1. view2. table3. ephemeral4. incrementala. モデルを実体化して持つb. 設定した戦略にしたがって増分蓄積するc. 全量蓄積よりもストレージコストが抑えられるd. 変更に弱いmaterialization を理解する
1. view2. table3. ephemeral4. incrementalmaterialization を理解する: まとめ
3つの Layer で構成されている1. staging2. intermediate3. martsコンサーンでディレクトリを分離する
staging● データのクレンジング、変換、整形を行う● 各 DataSource ごとにサブディレクトリが切られる● materialization は view を選択する● データの結合や集計などは行わないコンサーンでディレクトリを分離する
intermeiate● marts が複雑になった時、ビジネスロジックを分離するために使う● モデルが少数であったり、複雑でなければ利用しない● materialization は ephemeral を利用するコンサーンでディレクトリを分離する
marts● 特定のエンティティ(コンセプトとも呼ばれます )を実現する● ユーザーから唯一参照可能なレイヤー● view もしくは table を基本的に使う● 必要に応じて incremental を選択するコンサーンでディレクトリを分離する
コンサーンでディレクトリを分離する
● モデル実装時には Layer を意識する● Layer 毎に使うべき materialization が決まっている● 詳細ルールはベストプラクティスを参照するコンサーンでディレクトリを分離する: まとめ
● dbt を使うとデータ変換がいい感じに管理できる● dbt を使う時はベストプラクティスを参照しようまとめ
49 This material is confidential and the property of Belong Inc. Blog や Youtube も見てねblog Youtube