Closed10
dbt Fundamentals
dbt Fundamentals
Welcome to dbt Fundamentals
事前にDWHとdbt cloudを連携しておくと良いと説明があったが「Set up dbt cloud」という章もあるので後回しで良さそう。
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.
Set up dbt Cloud
dbt cloud overview
- '__':補完を開く
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されるらしい
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
コマンドによる鮮度の確認
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の設定を元に自動生成される。美しい
Documentation
Why is documentation important?
- データの生成元がわかる
- データの依存性がわかる
- カラムやテーブルの情報がわかる
What is documentation?
- dbtではref functionによって自動的に依存性のドキュメントが作成される
- コードとドキュメントの記述を分けなくて良い。コードを書けばドキュメントも生成される
Writing documentation and doc blocks
- yamlにdescription要素を追加することで、スキーマやテーブル、カラムに説明を加えられる
- 説明文はインラインで書く方法と、別ファイルを読み込む方法がある
- マークダウンとして別のファイルに分離することも可能。マークダウンのレンダリングを活用できる
- あるカラムが複数のテーブルに出現する場合、descriptionを一元管理できるのが疑問に思った
Documenting sources
- ソースに対しても同様にdescriptionを追加できる
Generate and view documentation
- dbt docs generate コマンドでdocumentを更新する
Deployment
Reviewing a dbt Cloud job
- Model Timingはモデル生成時間のガントチャートを表示する
- Artifactsは生成されたクエリやjsonの一覧を表示する
このスクラップは2024/05/05にクローズされました