$30 off During Our Annual Pro Sale. View Details »

dbt_ベストプラクティス_完全に理解した.pdf

dach
September 26, 2023

 dbt_ベストプラクティス_完全に理解した.pdf

dbt 初学者向けに基本的な使い方やディレクトリ構成についてを説明します

dach

September 26, 2023
Tweet

More Decks by dach

Other Decks in Technology

Transcript

  1. dbt ベストプラクティス
    完全に理解した
    dach@

    View Slide

  2. 自己紹介
    Belong Inc.
    チキン南蛮エンジニア 
    @dach
    やってること
    データ分析基盤








    中古スマホ
    Belong
    blog
 Youtube


    View Slide

  3. Agenda
    1. dbt の基本要素と動かし方を理解する

    2. Layer 構成と責務の分割について理解する

    3. テストについて理解する



    ※ 所要時間 30 min 程度を想定 (LT...?)


    View Slide

  4. Agenda
    1. dbt の基本要素と動かし方を理解する

    2. Layer 構成と責務の分割について理解する

    3. テストについて理解する



    ※ 所要時間 30 min 程度を想定 (LT...?)

    近日ブログにて公開予定

    View Slide

  5. 本編に入る前に...
    実は #29 の時に「dbt 完全に理解したい」という内容で話していたことがあった
    知識 0 状態からアップデートした知見を共有できれば

    View Slide

  6. Agenda
    1. dbt の基本要素と動かし方を理解する

    2. Layer 構成と責務の分割について理解する




    ※ 所要時間 30 min 程度を想定 (LT...?)


    View Slide

  7. dbt の基本要素と動かし方を理解する
    [Section Topic]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装

    View Slide

  8. Overview
    [この章の目的]
    ● 難しいことはさておき、 dbt について完全に理解する
    [この章で学べること]
    ● dbt はどういうツールであるか
    ● dbt を利用した実装の仕方
    ● dbt の基本的な使い方やよく出る用語

    View Slide

  9. [データ分析基盤初心者向け補足情報 ]
    1. データ分析基盤の全体像
    2. ELT(ETL) について
    3. dbt とは
    [本編]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装
    Section Topics

    View Slide

  10. [データ分析基盤初心者向け補足情報 ]
    1. データ分析基盤の全体像
    2. ELT(ETL) について
    3. dbt とは
    [本編]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装
    Section Topics

    View Slide

  11. DataSource
    データ分析基盤の全体像
    DWH
    Source 1
    Source 2
    Source 3
    BI tools
    アプリ
    生データ
    蓄積
    データ加工
    抽出
    抽出
    完全性
    チェック
    データ
    保持
    分析結果
    算出
    分析素材

    View Slide

  12. データ分析では、様々な DataSource (社内アプリや SaaS など) のデータを利用する必要があります。デー
    タ分析ができるように、サイロ化された場所からのデータ移動や加工が必要です。
    ELT(ETL) について
    元のソースからデータを取得する
    ことを指します
    利用される宛先に移動することを
    指します
    標準化や整形、など分析が可能な
    形式にすることを指します
    Extract
    (抽出)
    Load
    (移動)
    Transform
    (変換)

    View Slide

  13. dbt は、データ分析の領域における 「Transform」 を行うためのツールです。
    SQL ファーストの変換ワークフロー であるため、学習コストが低いことが特徴です。
    dbt とは?
    元のソースからデータを取得する
    ことを指します
    利用される宛先に移動することを
    指します
    標準化や整形、など分析が可能な
    形式にすることを指します
    Extract
    (抽出)
    Load
    (移動)
    Transform
    (変換)
    T における
    デファクト
    スタンダード

    View Slide

  14. ● dbt は、モジュール性、移植性、CI/CD、ドキュメントなどのソフトウェア エンジニアリングのベスト プラ
    クティスに従って、チームが分析コードを迅速かつ共同で展開できるようにする SQL ファーストの変
    換ワークフロー

    ● DWH 構築の ELT/ETL 処理における 「 T (Transform)」を担当

    ● Transform におけるデファクトスタンダードと言っても過言ではない 

    ● ほとんどの Modern Data Stack との連携が可能 



    https://www.getdbt.com/product/what-is-dbt/ 

    dbt とは?

    View Slide

  15. [データ分析基盤初心者向け補足情報 ]
    1. dbt とは?
    2. データ分析基盤の全体像
    3. ELT(ETL) について
    [本編]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装
    Section Topics

    View Slide

  16. 以下のサンプルユースケースを実現するテーブルを作ること
    ● サンプルユースケース
    ○ 顧客別にまとまった、最新の注文情報・支払い状況を確認する
    Section Goal

    View Slide

  17. Q. jaffle_shop とは?
    A. dbt のチュートリアルで使われる、架空の e コマースストア
    ● Repo URL
    ○ https://github.com/dbt-labs/jaffle_shop
    ● こんな感じのデータが揃っている
    jaffle_shop で学ぶ dbt

    View Slide

  18. リポジトリ開くとこんな感じ
    jaffle_shop で学ぶ dbt

    View Slide

  19. Q. サンプルユースケースを実現するために何をすれば良い?
    A. 動かせばユースケースを実現するテーブルが勝手に作れます
    [動かし方]
    1. dbt を install
    2. 所定の DB に接続するための設定を行う
    3. サンプルデータを入れる
    4. dbt を実行する
    jaffle_shop で学ぶ dbt

    View Slide

  20. 出来上がったものがこちら
    jaffle_shop で学ぶ dbt

    View Slide

  21. データの流れ(Data Lineage)だとこんな感じ
    jaffle_shop で学ぶ dbt

    View Slide

  22. # 接続の確認
    % dbt debug
    # サンプルデータの投入
    % dbt seed
    # テーブルの構築
    % dbt run
    # さっきの図を作る
    % dbt generate
    % dbt serve
    実際のコマンドだとこんな感じ
    jaffle_shop で学ぶ dbt

    View Slide

  23. ● dbt で作られたプロジェクトなら、簡単にテーブルを管理できます
    ● dbt run を実行するだけでテーブルが作られます
    ● 初めてのときは dbt の install や接続先の設定をする必要があります
    jaffle_shop で学ぶ dbt: まとめ

    View Slide

  24. [データ分析基盤初心者向け補足情報 ]
    1. dbt とは?
    2. データ分析基盤の全体像
    3. ELT(ETL) について
    [本編]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装
    Section Topics

    View Slide

  25. 今回の LT の中でも登場する dbt の用語にピックアップして説明します
    ● モデル
    ○ dbt で行うデータ変換処理を指します
    ○ ざっくりいうと、「1 SQL ファイル = 1 モデル」です
    ● マテリアライゼーション( materialization)
    ○ dbt においてモデルを保持する方法の選択肢のことです
    ○ v1.5.x 時点で選択肢は 4つあります
    ○ 後で説明します
    抑えておいたほうがいい用語解説

    View Slide

  26. [データ分析基盤初心者向け補足情報 ]
    1. dbt とは?
    2. データ分析基盤の全体像
    3. ELT(ETL) について
    [本編]
    1. jaffle_shop で学ぶ dbt
    2. 抑えておいたほうがいい用語解説
    3. 実践 dbt 実装
    Section Topics

    View Slide

  27. dbt の実装は至ってシンプルです
    クエリを書く!!
    具体的なモデルを見ていきます
    実践 dbt 実装

    View Slide

  28. 「顧客別にまとまった、最新の注文情報・支払い
    状況を確認する」を実現しているモデル
    実践 dbt 実装

    View Slide

  29. [要素]
    ref
    ● 事前定義されているマクロ
    ● 定義済みモデルを参照する
    ● Data Lineage 図で紐づくだけじゃなくて、
    環境差分とかもいい感じに解消してくれる
    ● e.g. dev-dach-test -> prod-dach-test
    実践 dbt 実装 データを引っ張ってくる
    関心毎に分けて集計
    集計結果を結合

    View Slide

  30. ● クエリを書く
    ● 管理ができるように関心事で処理を分ける
    実践 dbt 実装: まとめ

    View Slide

  31. Agenda
    1. dbt の基本要素と動かし方を理解する

    2. Layer 構成と責務の分割について理解する

    3. テストについて理解する



    ※ 所要時間 30 min 程度を想定 (LT...?)


    View Slide

  32. Layer 構成と責務の分割について理解する
    [Section Topic]
    1. materialization を理解する
    2. コンサーンでディレクトリを分離する

    View Slide

  33. [この章の目的]
    ● モデルを作るときに気をつけること理解する
    [この章で学べること]
    ● モデルの永続化について
    ● ベストプラクティスに則ったディレクトリ分割
    Overview

    View Slide

  34. 1. materialization を理解する
    2. コンサーンでディレクトリを分離する
    Section Topics

    View Slide

  35. 全部で4つあります (v1.5.x 時点)
    これらをモデルに選択することでどのようにモデルを保持するかが決まります。
    1. view
    2. table
    3. ephemeral
    4. incremental
    materialization を理解する

    View Slide

  36. 1. view
    a. view テーブル
    b. 実行ごとに View として再構築される
    c. 常に最新データが参照可能で、モデルの修正がすぐに反映される
    d. ただし、参照のたびにクエリコストが発生する
    2. table
    3. ephemeral
    4. incremental
    materialization を理解する

    View Slide

  37. 1. view
    2. table
    a. モデルを実体化して持つ
    b. 実行ごとにデータが再作成される
    c. 結果を直接参照できるため、分析ツールや macro からの利用が容易
    d. 更新が必要な場合には手動で再実行する必要がある
    3. ephemeral
    4. incremental
    materialization を理解する

    View Slide

  38. 1. view
    2. table
    3. ephemeral
    a. 実行時に一時テーブルとしてモデルに組み込まれる (CTE)
    b. = WITH 句
    c. クエリの複雑性を分離できる
    d. デバッグが困難になる可能性がある
    4. incremental
    materialization を理解する

    View Slide

  39. 1. view
    2. table
    3. ephemeral
    4. incremental
    a. モデルを実体化して持つ
    b. 設定した戦略にしたがって増分蓄積する
    c. 全量蓄積よりもストレージコストが抑えられる
    d. 変更に弱い
    materialization を理解する

    View Slide

  40. 1. view
    2. table
    3. ephemeral
    4. incremental
    materialization を理解する: まとめ

    View Slide

  41. 1. materialization を理解する
    2. コンサーンでディレクトリを分離する
    Section Topics

    View Slide

  42. 3つの Layer で構成されている
    1. staging
    2. intermediate
    3. marts
    コンサーンでディレクトリを分離する

    View Slide

  43. staging
    ● データのクレンジング、変換、整形を行う
    ● 各 DataSource ごとにサブディレクトリが切られる
    ● materialization は view を選択する
    ● データの結合や集計などは行わない
    コンサーンでディレクトリを分離する

    View Slide

  44. intermeiate
    ● marts が複雑になった時、ビジネスロジックを分離するために使う
    ● モデルが少数であったり、複雑でなければ利用しない
    ● materialization は ephemeral を利用する
    コンサーンでディレクトリを分離する

    View Slide

  45. marts
    ● 特定のエンティティ(コンセプトとも呼ばれます )を実現する
    ● ユーザーから唯一参照可能なレイヤー
    ● view もしくは table を基本的に使う
    ● 必要に応じて incremental を選択する
    コンサーンでディレクトリを分離する

    View Slide

  46. コンサーンでディレクトリを分離する

    View Slide

  47. ● モデル実装時には Layer を意識する
    ● Layer 毎に使うべき materialization が決まっている
    ● 詳細ルールはベストプラクティスを参照する
    コンサーンでディレクトリを分離する: まとめ

    View Slide

  48. ● dbt を使うとデータ変換がいい感じに管理できる
    ● dbt を使う時はベストプラクティスを参照しよう
    まとめ

    View Slide

  49. 49

    This material is confidential and the property of Belong Inc.

    Blog や Youtube も見てね
    blog
 Youtube


    View Slide