Open7

dbt Fundamentals

hyamakawhyamakaw

Welcome to dbt Fundamentals

事前にDWHとdbt cloudを連携しておくと良いと説明があったが「Set up dbt cloud」という章もあるので後回しで良さそう。

hyamakawhyamakaw

Who is an Analytics engineer?

Traditional data teams

  • data analysts
  • data engineers
  • 両者のスキルセットにギャップ有り

ETL and ELT

  • 伝統的にはETL
  • DWH:Super Computer + Data Base
  • Cloud DWHの登場によってELTも主流となった
  • 確かにマシンリソース(メモリ+ストレージ)がないとrawデータは取り込みにくい

Analytics engineer

  • Analytics Engineer:分析のしやすさを意識したTransformを行う
  • Data EngineerはExtract / Loadに集中できる
  • 理想的なチームにはAnalystsを加えた3者が揃う
  • 役割毎に明確な線引がされるわけでない

    https://www.getdbt.com/what-is-analytics-engineering

The modern data stack and dbt

  • DDL:Data Definition Language
    • CREATE, DROP, ALTER
  • DML:Data Manipulation Language
    • UPDATE, DELETE, INSERT, SELECT
  • dbtはETLのTを担う
  • 簡単なDMLでData Modelの作成、テスト・ドキュメンテーション、スケジューリングを実行可能
  • dbt on airflowの場合はスケジューリングをairflowに委譲しても良さそう

Overview of an exemplar project

  • exemplar:見本
  • このチュートリアルの最終成果物を紹介
  • データフローの実行、テストの実行、ドキュメントの作成諸々が疎結合かつシンプルな記述で実現できる印象をもった

Review

dbt empowers data teams to leverage software engineering principles for transforming data.

hyamakawhyamakaw

Models

What are models?

  • dbtではmodels/下にmodelを定義する.sqlを置く
  • dbtではDDLを書かなくて良い。
  • modelの実体はtableであったりview(cteだと思えば良い?)であったりする
  • sqlからmodelの変換はdbtが担う。開発者はビジネスロジックの記述に専念できる

Building your first model

  • dim_customers.sqlはschemaをdbt_tutorialにすると動いた
  • dbt_tutorialはBigQueryにhostされている公開データセットと推測
  • dbt cloud IDEでdbt runを実行すると、models/下のsqlを元にDDLが走る。その結果DWHにテーブルが作成される
  • ViewとTableの違い:Viewは参照するたびにクエリを実行する。物理的なデータは持っていない。Tableaは物理的なデータを持っている
  • dbt run --select [model_name]で特定のモデルのみrunできる
  • dbt run ではデフォルトでtableが作成される設定になっている。tableに切り替えるにはmodelのsql冒頭でconfigを加えれば良い

What is modularity?

  • Modularity(モジュール性):building a final product piece by piece rather than all at once
  • Modularityを高めることでクエリの再利用性が高まる

Modularity and the ref functions

  • materialize:具現化
  • ref関数でテーブル依存を抽象化できる。異なる環境での実行や、コードの共有が容易になる。

Naming conventions

  • sources:raw data
  • staging:source tableと1対1で対応。簡単な前処理が施されたモデル
  • intermediate:stagingとfinalの間をつなぐモデル。必ずstagingモデルを参照する
  • fact:events, clicks, votesなど発生した事象を保存する細長いモデル
  • dimension:人々、場所、企業、製品など属性に関連したモデル

Reorganize your project

  • dbt_project.yamlでfolder単位の設定を記述できる
  • configブロックではなくdbt_project.yamlで構成を管理したほうが良い
  • このケースでは、ビジネスロジックをmart/coreに書いている

Exemplar

  • exemplar:模範(exampleのスペルミスかと思った笑)
  • stg_*.sqlの追加、fct_orders.sqlの追加などを課題形式で行った
  • 前章でモデルの種類を学んだ。クエリの実装時にはそれらのモデルの違いを活かせなかった。tutorialを終えた後に深堀りすれば良さそう。

Review

  • ref functionで定義した依存関係はdbtによってハードコードされた[database_name].[table_name]に具現化される。
  • 確かBigqueryとの接続時にDB単位でAPI Keyを発行した。API Keyをdbt cloud ideに連携すると自動的にdb_nameが設定される?
  • conventions:規則
  • stg modelは一般的にviewとしてmaterializedされるらしい
hyamakawhyamakaw

Sources

What area sources?

  • 利点1:yamlによるrawテーブルの一元管理
  • 利点2:lineageにおけるrawテーブルの可視化
  • source functionでテーブル名を指定する

Configure and select from sources

  • light data transformation:cast, aliasの付与など軽微なデータ変換

SnowFlakeのUI。Bigqueryよりも洗練的な印象がある。

Lineage右上の入力欄で前段/後段テーブルの深さを選べる

Source freshness

  • なぜか英語字幕の表示機能が消えている
  • 音声オンリーでも意外と理解できる
  • 多分めっちゃはっきり発音してくれる
  • タイムスタンプを元にデータの鮮度を監視できる

Review

  • sourceの利点
    • テーブル名の一元管理
    • lineageにおける可読性向上
    • dbt source freshnessコマンドによる鮮度の確認
hyamakawhyamakaw

Tests

Why Testing?

  • データへの信頼性の向上
  • クリティカルな不具合の早期発見
  • コーディング・デバッグの効率化

What is testing?

  • inplies:暗示する
  • confidence:自信
  • dbtでは2種のテストがある
    • singular tests
    • generic tests
  • generic tests
    • yamlで書く
    • カラムが対象
    • 種類:unique, not_null, accepted_values, relationships

generic tests

  • accepted_values:定義済みのvalueのみを許容する
  • relationshsips:Each value in this columns exists in the column of another table.
  • dbt testコマンドを実行するとdbtはassertをsimpleなsqlに変換しDWHで実行する

singular tests

  • tests/[model_name].sql にエラー想起の条件を書くことでtestを実行できる

Testing sources

  • src_*.ymlにtestを書くことでsourceをvalidateできる

The dbt Build command

  • dbt build:dbt_testとdbt_runをまとめて実行する
  • UIからも実行できる
  • modelの先頭に+をつけると上流のテーブルも対象となる。例)dbt build --select +dim_customers
  • test名はyamlの設定を元に自動生成される。美しい