違いは「何を指しているか」と「どう参照するか」に出る。
| source(sources.yml) | model(schema.yml) | |
|---|---|---|
| 対象 | 外部テーブル(BigQueryに直接生成されたテーブルなど) | dbtモデル(.sqlファイル) |
| 参照 | source() 関数 | ref() 関数 |
| フック | pre-hook は定義できない | post-hook を定義できる(pre-hook は非推奨) |
| その他 | — | テスト、ドキュメントを追加できる |
sourceで読み込むには、必ずYAMLファイルが必要。ファイル名は任意(例:staging.raw_data.yml、sources.yml)で、モデルファイルと同じディレクトリ、または models/ 配下に置く。
sources.yml(ソース定義)。
version: 2
sources:
- name: raw_data # ソース名(任意)
description: "Raw data from BigQuery"
database: your_project
schema: staging
tables:
- name: raw_table_name # 実際のテーブル名
description: "Description of the table"
# カラムの定義(オプション)
columns:
- name: column1
description: "Description of column1"
schema.yml(モデル定義)。name は .sql ファイル名と一致させる。
version: 2
models:
- name: model_name
description: "Description of the model"
config:
materialized: table # view, table, incremental など
# ⚠️ pre-hook は使わない(SQLファイル内で処理する)
columns:
- name: id
description: "Primary key"
tests:
- unique
- not_null
配置は models/staging/ のようにモデルファイル(.sql)と同じディレクトリに置くのが安全。ファイル作成場所のミスは、dev環境でファイルが見つからないエラーとして出てくる。
Source 'raw_data' not found … sources.yml が無い / テーブル名が違う。ソース定義を作り直すFile not found in dev_<自分のユーザー名> … ファイルの配置場所、プロジェクトルートからの相対パス、dbt_project.yml の設定を確認Invalid YAML syntax … インデントはスペース2つ、version: 2 を忘れない、コロンの後にスペースを入れる実践の順番は4ステップ。
models/staging/<ソース>.yml を作って dbt compile で構文チェックmodels/staging/<モデル>.yml を作ってテストを追加.sql から {{ source('raw_data', 'raw_data') }} で参照dbt run --select <モデル> と dbt test --select <モデル> で確認primary_key テストと複合主キー