dbt Fusion engineのcolumn lineage機能を試してみた
こんにちは、stable株式会社のmyshmehです。
日本時間2025年5月29日未明に新たなdbtエンジン、Fusionが公開されました。
本記事では、早速Fusionおよびその対となるdbt extensionをインストールし、新機能カラムリネージを試します。デモとして、自分が過去にosmosisとsdfを比較した下記記事を引用して、複雑なカラム変更にも耐えるFusionの底力をご紹介しようと思います。
デモ環境
自分の記事で使ったmyshmeh/osmosis_vs_sdfレポジトリを引用します。特に、以下のモデルを使っていきます。
早速dbt extensionで本記事のmodel lineageを表示してみました
モデルコートは以下の通りです。
with source_data as (
select
1 as columnA,
1 as column_b
)
select *
from source_data
select
columnA as column_a,
column_b as columnB
from {{ ref('parent') }}
select
columnA as column_b,
column_b as columnA
from {{ ref('parent') }}
デモ内容
過去のosmosis vs sdf記事では、osmosisのカラム追従ロジックが下図のようにchild2, child3のカラムリネームをうまく捉えられなかったことを課題に挙げていました。
osmosisのロジックだと、child2のカラムリネームを捉えられなかった
child3でも、カラムの追従があべこべに
それでは、Fusion engineがこれらの問題を乗り越え、正しくカラムリネージを出力できるのか見ていきましょう!
インストール
以下のコマンドで、dbt Fusion engineをインストールします。
curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
dbtf --version
を実行して、以下のようなoutputが出ればインストール完了です。
dbt-fusion 2.0.0-beta.12
続いて、vscode (またはcursor)のdbt extensionをインストールします。
vscode (またはcursor)のExtensionsタブで、"dbt"と入力すれば出てきました(発行元がdbt Labs Inc
であるかに注意が必要です)。
Windsurfは対応しているの?
執筆時点では、Windsurfにはdbt extensionが公開されていないようです。
ただ、公式Slackのdbt-fusion-engineチャンネルで、検討するような記述が見られたので、将来的には公開されるかもしれません。
デモ
では、実際にカラムリネージが正しく表示されるか見ていきましょう!
まずはモデルリネージ
まず、全体のモデルリネージを表示しましょう。
ファイルExplorerから、parent.sqlを右クリックし、dbt: View Lineage
>> Show Project Linegae
と選択しましょう。
すると、エディタ下部の「LINEAGE」欄に、モデルリネージが表示されます。
いよいよカラムリネージ!
それでは、カラムリネージを表示し、parentからカラムがどのように変遷していくかみていきます。
おさらいとして、child2, child3モデルは、次のように定義されています。
select
columnA as column_a,
column_b as columnB
from {{ ref('parent') }}
select
columnA as column_b,
column_b as columnA
from {{ ref('parent') }}
最初に、リネージ図中のparent
モデルを右クリックし、Show column lineage
を選択します。
すると、どのカラムリネージが見たいかプロンプトされます。ここでは、COLUMNA
を選択してみます。
parent.columnAがdownstreamモデルでどうリネームされたか、正しく表示されました!同様に、parent.column_bについても、実態に即したカラムリネージが表示されることを確認できます。
ちなみに: ノードからファイルを開けます
ノードを右クリックからOpen file
を選択またはダブルクリックすると、該当するモデルをエディタで開くことができます。地味ですが、嬉しい開発体験です。
リネージはリネームだけじゃない!
次に、カラムの値を加工すると何が起きるでしょうか?試しに、child3_1.sqlを作成し、以下のようにchild3のカラム同士を足してみます。
with child3 as (
select * from {{ ref('child3') }}
),
final as (
select
column_b + columnA as column_mixed
from child3
)
select * from final
先ほどと同様の手順でカラムリネージを表示してみると、TRANSFORMATION
という形で上流カラム同士を足したことが表現されています!
このように、dbt extensionのカラムリネージでは、カラムの変容について以下をトラッキングできます。
- PASSTHROUGH: そのまま上流カラムを使った
- RENAME: 上流カラムをリネームした
- TRANSFORMATION: 上流カラムを加工した
今までdbt cloudでは提供されていましたが、この機能がsource-available(ELv2ライセンス)な形で我々の元に提供されたのは、大変ありがたいですね。
残念ながら、現状ではdescriptionの伝播機能はFusion、dbt extensionのどちらにもなさそうです。しかし、Fusionの技術アプローチでは可能なことなので、いつかosmosisのような機能が追加されることは期待できます!
まとめ
いかがでしたでしょうか?本記事では、FusionによるSQLの静的解析が、厳密なカラムリネージを実現することをご紹介しました。dbt power userでもカラムリネージは提供されていますが、これはAIを用いた確率的なアプローチなので、正確性の側面ではFusionに軍配が上がりそうです。
そもそも、なぜFusionにこのような機能が実現できてdbt-coreにはできなかったのか、その核心を知りたい方は、ぜひ自分の過去の記事をご参照いただければ嬉しいです。また、6/17(Tue)開催のdbt tokyo#14でもFusionの技術的な魅力について詳細にお伝えしようと思いますので、ぜひご参加ください。
Discussion