imu-note
いむたろ
いむたろ
@imutaroh
新卒エンジニア / データ基盤 × AI

What — source と model の違い

違いは「何を指しているか」と「どう参照するか」に出る。

source(sources.yml)model(schema.yml)
対象外部テーブル(BigQueryに直接生成されたテーブルなど)dbtモデル(.sqlファイル)
参照source() 関数ref() 関数
フックpre-hook は定義できないpost-hook を定義できる(pre-hook は非推奨)
その他テスト、ドキュメントを追加できる

sourceで読み込むには、必ずYAMLファイルが必要。ファイル名は任意(例:staging.raw_data.ymlsources.yml)で、モデルファイルと同じディレクトリ、または models/ 配下に置く。

How — 基本構造とファイル配置

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環境でファイルが見つからないエラーとして出てくる。

よくあるエラー3つ
  • Source 'raw_data' not foundsources.yml が無い / テーブル名が違う。ソース定義を作り直す
  • File not found in dev_<自分のユーザー名> … ファイルの配置場所、プロジェクトルートからの相対パス、dbt_project.yml の設定を確認
  • Invalid YAML syntax … インデントはスペース2つ、version: 2 を忘れない、コロンの後にスペースを入れる

実践の順番は4ステップ。

  1. models/staging/<ソース>.yml を作って dbt compile で構文チェック
  2. models/staging/<モデル>.yml を作ってテストを追加
  3. .sql から {{ source('raw_data', 'raw_data') }} で参照
  4. dbt run --select <モデル>dbt test --select <モデル> で確認

関連