dbt の codegen で sources.yml や staging の model、schema.yml を自動生成する

dbt

codegen は各種ファイルを自動生成する macro を提供する公式の package。Best practice guides でおすすめされている。

dbt の Best practice guides におけるモデルのレイヤー分け - sambaiz-net

packages.yml に追加して dbt deps でインストールする。

packages:
  - package: dbt-labs/codegen
    version: 0.12.1

dbt run-operation で macro を実行できる。

generate_source

staging の model が参照する sources.yml を生成する。

$ dbt run-operation generate_source --args 'schema_name: dbttest'
...
sources:
  - name: dbttest
    tables:
      - name: my_first_dbt_model
      - name: my_second_dbt_model

generate_base_model

source を rename する staging model のベースを生成する。

$ dbt run-operation generate_base_model --args '{"source_name": "dbttest", "table_name": "my_first_dbt_model"}'
...
with source as (

    select * from {{ source('dbttest', 'my_first_dbt_model') }}

),

renamed as (

    select
        id

    from source

)

select * from renamed

generate_model_yaml

dbt run した model から schema.yml を生成する。

$ dbt run-operation generate_model_yaml --args '{"model_names": ["my_first_dbt_model", "my_second_dbt_model"]}'
...
models:
  - name: my_first_dbt_model
    description: ""
    columns:
      - name: id
        data_type: int64
        description: ""

  - name: my_second_dbt_model
    description: ""
    columns:
      - name: id
        data_type: int64
        description: ""

参考

dbtでmodelやsourceのベースとなるコードを自動で生成してくれるpackage「codegen」を試してみた #dbt | DevelopersIO