dbt Fusion enginのカラムリネージュとSDFのカラムリネージュの比較
SDFをベースとしいるdbt Fusion enginでカラムリネージュができるようになりましたが、SDFのカラムリネージュと比較してみます。
結論
- SDFはカラムの直接的なリネージュだけでなく、whereやgroup byなどの間接的なリネージュも表示できるが(Lineage - SDF)、dbt Fusion enginでは今のところ直接的なリネージュのみ表示される
- SDFのカラムリネージュもforwad方向(upstream→downstream)では直接的なリネージュしか表示されない
事前準備
dbt coreがインストールされている前提です。
- dbt coreのインストール
SDFのインストール
SDF CLI を参考にインストールします。
確認環境はWindows11のWSL2(Ubuntu)です。
$ curl -LSfs https://cdn.sdf.com/releases/download/install.sh | sh -s
バージョンを確認します。
$ sdf --version
sdf 0.10.8
SDFのリネージュ出力
SDFのリネージュ出力を見てみます。dbtのjaffle-shop-classicを使います。
$ git clone https://github.com/dbt-labs/jaffle-shop-classic.git
dbtのprofiles.ymlのjaffle_shopを設定します。
$ vi ~/.dbt/profiles.yml
jaffle_shop:
target: dev
outputs:
dev:
type: snowflake
account: <snowflake_account>
user: <snowflake_user>
private_key_path: <snowflake_user_private_key_path>
role: <snowflake_role>
warehouse: <snowflake_warehouse>
database: <snowflake_database>
schema: <snowflake_schema>
threads: 1
接続確認と初期データ設定をしておきます。
# 接続確認
$ dbt debug
# 初期データ設定
$ dbt seed
dbtプロジェクトをSDFと連携します。
参考:Integrating with DBT - SDF
$ sdf dbt init
Snowflakeと接続します。詳細は以下を参照。
$ sdf auth login snowflake --account-id <ACCOUNT_ID> --username <USERNAME> --role <ROLE> --warehouse <WAREHOUSE_NAME> --private-key-path <PATH_TO_PRIVATE_KEY> --private-key-passphrase <PASSPHRASE>
workspace.sdf.ymlに接続先Snowflakeの情報を入力します。
integrations:
- provider: snowflake
type: database
sources:
- pattern: <snowflake_db_name>.*.*
sdfのコンパイルを実行します。
$ sdf compile
SDFでリネージュを出力します。--show-scansオプションをつけると、単純な値のリネージュだけでなく、whereやgroup byに利用されているカラムをscanとして出力してくれます。
$ sdf lineage customers --show-scans --column number_of_orders
Working set 5 model files, 3 .sdf files
Finished 7 models [7 reused] in 2.039 secs
SF_DB.SF_SHCEMA.customers.number_of_orders
│
│ mod
├──────┐
│ SF_DB.SF_SHCEMA.STG_ORDERS.ORDER_ID
│ │
│ │ copy
│ └──────┐
│ SF_DB.SF_SHCEMA.RAW_ORDERS.ID
│ scan
└──────┐
SF_DB.SF_SHCEMA.STG_CUSTOMERS.CUSTOMER_ID
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.RAW_CUSTOMERS.ID
SF_DB.SF_SHCEMA.STG_ORDERS.CUSTOMER_ID
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.RAW_ORDERS.USER_ID
SF_DB.SF_SHCEMA.STG_ORDERS.ORDER_ID
SF_DB.SF_SHCEMA.STG_PAYMENTS.ORDER_ID
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.RAW_PAYMENTS.ORDER_ID
--show-scanオプションなしだと以下のような通常のリネージュのみが出力されます。
$ sdf lineage customers --column number_of_orders
Working set 5 model files, 3 .sdf files
Finished 7 models [7 reused] in 2.079 secs
SF_DB.SF_SHCEMA.customers.number_of_orders
│
│ mod
└──────┐
SF_DB.SF_SHCEMA.STG_ORDERS.ORDER_ID
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.RAW_ORDERS.ID
一方で、スキャンに利用されたカラム(customer_id)を入力側からリネージュを確認しても、whereやgroup byで使われた関連までは出力されませんでした。
$ sdf lineage raw_customers --show-scans --column id --forward
Working set 5 model files, 3 .sdf files
Working set 5 model files, 5 .sdf files
Finished 8 models [8 reused] in 2.385 secs
SF_DB.SF_SHCEMA.RAW_CUSTOMERS.id
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.STG_CUSTOMERS.CUSTOMER_ID
│
│ copy
└──────┐
SF_DB.SF_SHCEMA.CUSTOMERS.CUSTOMER_ID
dbt Fusion enginのインストール
Install Fusion | dbt Developer Hub を参考にインストールします。
$ curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
バージョンを確認します。
$ dbtf --version
dbt-fusion 2.0.0-beta.13
この時点でdbtコマンドもdbt Fusionが実行されるようになりますが、dbt coreをvenvでインストールしている場合は再度venvを変更することでdbtはdbt core、dbtfはdbt Fusion engineで動くようになります。
$ dbt --version
dbt-fusion 2.0.0-beta.13
$ source ~/.venv-dbt/bin/activate
(.venv-dbt)$ dbt --version
Core:
- installed: 1.9.4
dbt Fusionでリネージュ
dbtf compileでプロジェクトを変換します。warningが出ましたが完了しました。
$ dbtf compile
Visual Studio Codeにdbtの拡張機能をインストールします。
LINEGEタブでモデル単位のリネージュが見れます。

customersを右クリックして、Show column lineageをクリックします。

表示したいカラム名の選択リストが出るので、NUMBER_OF_ORDERSを選びます。

カラムリネージュが表示されました。リネームや変換されたのかも見れますね。動きとしてはdbt Cloudのカラムリネージュと同じのように見えます。一方で、SDFの--show-scansオプションを指定したときのscanリネージュは見ることができません。

dbt Fusionのカラムリネージュも今後進化がある?と発表で言っていた気もしますが、SDFに搭載されている--show-scansオプションも取り入れられると嬉しいですね。
一方で、SDFもforwad方向には対応していないようなので、そちらへの対応はまだまだ先になりそうです。
Discussion