💽

dbtでカラムレベルのリネージを表示してくれるVSC拡張機能「Turntable」

2023/12/08に公開

「Turntable」は、dbtでパイプラインを構築する際、VSCode上でカラムレベルのリネージや、ymlの自動生成をしてくれる無償の拡張機能です。

https://www.turntable.so/

提供元であるTurntableからは、有償のクラウド版開発環境が提供されています。dbtコーディングの支援をしてくれるcopilotを備えていたり、DBからソーステーブルを読み取って自動生成したりと、いろいろできるようです。そちらは深く調べていないので、割愛します。m(__)m

インストール

https://www.turntable.so/extension

こちらから入手できます。途中、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で編集されたカラムも、ちゃんと解釈してくれています。

orders.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が出力されます。

models.yml
version: 2
models:
  - name: orders
    description: これは、モデルの説明です。
    columns: []

次に、Autofillを試してみます。Autofillは、OpenAIのテクノロジに頼って、モデルとカラムの説明文を自動作成する機能です。

model documentationのサイドパネルから「Autofill」を押下すると、Autofillしたい項目を選ぶポップアップが出ます。とりあえず全部のカラムを選んでみます。

以下のymlが出来上がりました。

models.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に、収集されるデータについての説明がありました。
https://turntable-so.github.io/docs/4a3fa326-247f-402d-8351-11a70fb23cd4

主に、

  • モデルのメタデータ(列名など)
  • モデルのコード
  • 機能の使用状況

に関するデータが収集されます。モデルのメタデータとコードの収集は設定からオプトアウトが可能とのことです。

まとめ

2023.12現在、OSSではなく、無料のベータ版という位置付けの製品ですが、将来的にはOSS化も検討しているみたいです。

データ送信の機能を含んでいるので業務利用は躊躇うものの、すごく魅力的な拡張だと思います。

流行って欲しいです!!!

Discussion