【dbt】dbt ~ 基本編 / Source ~

■ はじめに

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