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 の profile と target は、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 inspect は nagi_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)をもとに行います。