📖

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を使います。

https://github.com/dbt-labs/jaffle-shop-classic

$ git clone https://github.com/dbt-labs/jaffle-shop-classic.git

dbtのprofiles.ymljaffle_shopを設定します。

$ vi ~/.dbt/profiles.yml
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の情報を入力します。

workspace.sdf.yml
  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の拡張機能をインストールします。

https://marketplace.visualstudio.com/items?itemName=dbtLabsInc.dbt

LINEGEタブでモデル単位のリネージュが見れます。

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

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

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

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

Discussion