■ はじめに
DBT の Source について、徐々にまとめていく
目次
【1】Source 【2】ベストプラクティス 【3】使い方 1)Source の宣言 2)フォーマット 【4】Hello world 1)準備 2)サンプル
【1】Source
* 変換の元となるデータを「ソース」と呼ぶ cf. Source = 源泉
https://docs.getdbt.com/docs/build/sources
【2】ベストプラクティス
ローデータは、直接参照するのではなく sourceとして定義するのが推奨。 => どのモデルにも直接参照がなくなる
【3】使い方
* 以下の公式ドキュメントのコードを見るのが 理解しやすく、分かりやすいかも。
https://docs.getdbt.com/docs/build/sources
1)Source の宣言
version: 2 sources: - name: [SOUCE_NAME] # this is the source_name database: [database_name] tables: - name: [TABLE_NAME] # this is the table_name
schema.yml
sources: # ★ここが各ソースの1要素になる★ - name: demo_source database: hello_world tables: - name: raw_user - name: raw_order
2)フォーマット
source('ソース名', 'テーブル名')
https://docs.getdbt.com/reference/dbt-jinja-functions/source
モデル例
-- source('ソース名', 'テーブル名') select * from {{ source('[SOUCE_NAME]', '[TABLE_NAME1]') }} as a1 left join {{ source('[SOUCE_NAME]', '[TABLE_NAME1]') }} as a2 on a1.id = a2.id
【3】Hello world
1)準備
* 以下の関連記事を行い、 テーブル「raw_customers」「raw_orders」を作成しておくこと
https://dk521123.hatenablog.com/entry/2023/11/25/231128
2)サンプル
model/schema.yml
version: 2 sources: - name: raw database: sample_db schema: public tables: - name: raw_customers - name: raw_orders
model/demo_from_source.sql
{{ config( materialized='incremental', unique_key=['id'], incremental_strategy='merge', merge_update_columns=['status'] ) }} with model as ( select r.id, r.order_date, r.status, r.user_id, c.first_name || ' ' || c.first_name as cust_name from {{ source('raw', 'raw_orders') }} as r left join {{ source('raw', 'raw_customers') }} as c on r.user_id = r.id ) SELECT * FROM model
参考文献
https://zenn.dev/foursue/books/31456a86de5bb4/viewer/ed0bb9
関連記事
dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ 基本編 / Model ~
https://dk521123.hatenablog.com/entry/2023/11/25/231128
dbt ~ 基本編 / Seed ~
https://dk521123.hatenablog.com/entry/2023/11/20/230946