コンテンツにスキップ

dbt Core

Nagi は kind: Origin を通じて dbt プロジェクトから Nagi のリソースを自動生成します。

Prerequisites

Nagi を実行する環境に dbt CLI(dbt-core >= 1.0)のインストールが必要です。

Init

nagi init を実行すると、以下のリソースが resources/ に生成されます。 実行する際に dbt プロジェクトのパスと、使用する profile / target を指定してください。

dbt configuration 生成されるリソース
profile / target kind: Connection
project kind: Origin

yaml apiVersion: nagi.io/v1alpha1 kind: Connection metadata: name: my-bigquery spec: dbtProfile: profile: my_project target: dev

yaml apiVersion: nagi.io/v1alpha1 kind: Origin metadata: name: my-dbt-project spec: type: DBT connection: my-bigquery projectDir: ../dbt-project

Connection の profiletarget は、dbt コマンドでの --profile / --target オプションとして渡されます。 Origin の projectDir--project-dir オプションで使われます。

Compile

nagi compile を実行すると、Origin の定義をもとに dbt プロジェクトを読み取り、Asset / Conditions / Sync を target/ に生成します。

Asset 名は {Origin名}.{model名} の形式で生成されます。

リソース生成のマッピングとマージの動作は Resource Generation を参照してください。

Evaluate

Evaluate は Nagi が直接実行します。

  • Freshness / SQL: Nagi が Connection の接続情報でデータウェアハウスに直接クエリを発行します
  • type: Command(dbt test): dbt CLI をサブプロセスとして実行します

Sync

dbt CLI をサブプロセスとして実行します(例: dbt run --select daily_sales)。

Propagating execution_id to BigQuery jobs

Sync 中に実行された BigQuery ジョブを nagi inspect で表示するには、NAGI_EXECUTION_ID 環境変数を BigQuery のジョブラベルに伝播させます。

dbt_project.yml に以下を追加します。

yaml query-comment: comment: "{{ query_comment(node) }}" job-label: true

macros/query_comment.sql を作成します。

sql {% macro query_comment(node) %} {%- set comment_dict = {} -%} {%- do comment_dict.update( app='dbt', dbt_version=dbt_version, nagi_execution_id=env_var('NAGI_EXECUTION_ID', ''), ) -%} {%- if node is not none -%} {%- do comment_dict.update(node_id=node.unique_id) -%} {%- endif -%} {% do return(tojson(comment_dict)) %} {% endmacro %}

job-label: true を指定すると、dbt-bigquery は JSON コメントをパースしてキーを BigQuery のジョブラベルとして付与します。nagi inspectnagi_execution_id ラベルでジョブを照合します。

Customization

Origin が自動生成した Asset と同じ名前で Asset を resources/ に定義すると、onDrift がリスト結合されます。マージのルールと具体例は Resource Generation - Merge with User-defined Resources を参照してください。

Multi Projects

Origin として複数の dbt プロジェクトを設定した場合、Nagi はプロジェクト間の依存関係を自動的にマッピングします。マッピングは dbt の Relation(database.schema.identifier)をもとに行います。