dbtでカラムレベルのリネージを表示してくれるVSC拡張機能「Turntable」
「Turntable」は、dbtでパイプラインを構築する際、VSCode上でカラムレベルのリネージや、ymlの自動生成をしてくれる無償の拡張機能です。
提供元であるTurntableからは、有償のクラウド版開発環境が提供されています。dbtコーディングの支援をしてくれるcopilotを備えていたり、DBからソーステーブルを読み取って自動生成したりと、いろいろできるようです。そちらは深く調べていないので、割愛します。m(__)m
インストール
こちらから入手できます。途中、Turntableのアカウント作成が求められるので、適当に作成してください。
VSCode上でログインができたら、インストール完了です。
使い方
dbtプロジェクトのセットアップ
サンプルとして、jaffle_shopをローカルに立てたPostgreSQLに向ける形で動かしました。プロジェクトの作り方などの説明は割愛します。
プロジェクトの準備ができたら、VSCodeでプロジェクトを開き、コマンドパレット(Command + Shift + P)から「Turntable for dbt Core: Open Settings」を開きます。
Settingsページのインストラクションに従い、拡張機能に以下項目を設定していきます。
- 使いたいpython実行環境のパス
- dbtバージョン (2023.12現在、1.3〜1.7が対応していました。)
- 利用するDB製品(Snowflake, BigQuery, Redshift, Databricks, Postgresが選べました。)
最後にdbt debugが通れば成功です。
リネージの表示
適当なSQLを開いて、コマンドパレットから「Open lineage view」を選択します。
出ました!本当にカラムのリネージまで確認できます。すごい!
以下のようなJnijaを含むSQLで編集されたカラムも、ちゃんと解釈してくれています。
order_payments as (
select
order_id,
{% for payment_method in payment_methods -%}
sum(case when payment_method = '{{ payment_method }}' then amount else 0 end) as {{ payment_method }}_amount,
{% endfor -%}
sum(amount) as total_amount
from payments
group by order_id
),
YMLの自動作成
Turntableは、ymlも自動で作成してくれます。
ためしに、jaffle_shopのモデルからymlを消して、Turntableに作ってもらいました。
コマンドパレットから「Open model documentation」を選択します。
サイドパネルにそれぞれのdescriptionを書くエリアが現れるので、適当なモデルの説明文だけ入れて、Saveしてみます。
以下のようなymlが出力されます。
version: 2
models:
- name: orders
description: これは、モデルの説明です。
columns: []
次に、Autofillを試してみます。Autofillは、OpenAIのテクノロジに頼って、モデルとカラムの説明文を自動作成する機能です。
model documentationのサイドパネルから「Autofill」を押下すると、Autofillしたい項目を選ぶポップアップが出ます。とりあえず全部のカラムを選んでみます。
以下のymlが出来上がりました。
version: 2
models:
- name: orders
description: これは、モデルの説明です。
columns:
- name: ORDER_ID
description: A unique number that identifies the order.
- name: CUSTOMER_ID
description: A unique number that identifies the customer who placed the order.
- name: ORDER_DATE
description: The calendar date on which the order was placed.
- name: STATUS
description: The current status of the order, such as 'pending', 'shipped',
or 'delivered'.
- name: CREDIT_CARD_AMOUNT
description: The portion of the order amount paid via credit card.
- name: COUPON_AMOUNT
description: The dollar amount discounted from the order total using a coupon
code.
- name: BANK_TRANSFER_AMOUNT
description: The portion of the order amount paid via bank transfer.
- name: GIFT_CARD_AMOUNT
description: The portion of the order amount paid using a gift card.
- name: AMOUNT
description: The total dollar amount of the order, including all payment methods
and discounts.
STATUS列の説明には 「Pending, shipped, deliveredなど」 という説明書きがされていますが、実際にはこのようなステータスはjaffleのデータには含まれていません。テーブルやカラムの名前から推測して埋めてくれているのでしょうか?
英語ということもあり、まだちょっと改善を待ちたい印象です。
クエリの実行
jinjaやmacroを含んだdbtコードをすぐさまウェアハウスで実行できます。SQLファイル上で「Command + Enter」を叩くだけです。
また、コマンドパレットから「Open compiled sql」を選ぶことで、コンパイル後のSQLの確認も行えます。
気になったところ
データの保護
Open AIとの連携などを含むことからもわかるように、外部にコードを送る操作がいくつか含まれています。FAQに、収集されるデータについての説明がありました。
主に、
- モデルのメタデータ(列名など)
- モデルのコード
- 機能の使用状況
に関するデータが収集されます。モデルのメタデータとコードの収集は設定からオプトアウトが可能とのことです。
まとめ
2023.12現在、OSSではなく、無料のベータ版という位置付けの製品ですが、将来的にはOSS化も検討しているみたいです。
データ送信の機能を含んでいるので業務利用は躊躇うものの、すごく魅力的な拡張だと思います。
流行って欲しいです!!!
Discussion