[dbt] 作成したデータモデルの使い方を示すことができるExposuresを使ってみた

露出していること。人前や社会に出ること。
2022.01.11

大阪オフィスの玉井です。

最近、見ていない間に、dbtにも色々な機能が増えております。

今回は、Exposuresという機能を使ってみたいと思います。

概要

公式ドキュメントの解説を(多少崩しながら)そのまま読むならば、「dbtのプロジェクトの下流での利用を定義する」といったところでしょうか。もう少し、自分なりの解釈を挟むと、dbtで生成したデータモデルの使いみちを記述できる(補足する)機能かと思いました。

使ってみるとわかりますが、dbt docs generateで生成できるドキュメントに、そのデータモデルの「使いみち」を追記できる形となります。

というわけで、実際に使ってみたいと思います。

やってみた

環境

  • dbt Cloud
    • dbt v1.0

Exposuresはymlファイルに追記する

ここでいうymlファイルとは、sourceとかtestとかを書いているymlファイルのことです。modelsディレクトリ下に作成するymlファイルです(dbt_project.ymlではない)。

結論から先に言うと、下記のように記述します。

exposures:
  
  - name: 顧客情報
    type: dashboard
    maturity: medium
    url: https://dev.classmethod.jp/author/tama/
    description: >
      このデータは、Tableauの顧客分析ダッシュボードに使われるテーブル群ですわ!!!!!!!!。
    
    depends_on:
      - ref('dim_customers')
      - ref('stg_customers')
      - ref('stg_orders')
      - source('jaffle', 'raw_order')
      - source('jaffle', 'raw_customer')
      
    owner:
      name: 玉井励
      email: tamai.rei@classmethod.jp

パラメータのうち、入力が必須なのは、以下の3点です。

  • name
    • Exposuresの名前
  • type
    • データモデルの使いみちの種類を指定します。値は決まっており、dashboardとかml等があります(ドキュメント上でこれらのカテゴリ別に整理されるようです)。
  • owner: email
    • Exposuresを定めた人物のメールアドレスを入力します。このデータモデル群の詳細を聞く相手…って感じでしょうか。

重要なパラメータなのはdepends_onです。Explosuresで示した使いみちの対象となるデータモデルを指定します(私が検証した限り、各順番はテキトーで大丈夫です。依存関係はdbt側が認識するようです)。

コマンドを叩いてExposuresを適用する

dbt docsにExposuresを反映するには、dbtコマンドを実行するのですが、例えば下記を実行すると、depends_onで指定しているデータモデルに対してrunが実行され、かつexposuresがドキュメントに反映されます。runじゃなくてtestとかでもいけるようです。

dbt run -s +exposure:顧客情報

公式ドキュメントには特に言及されていないのですが、(例えば、Exposuresの内容を編集した後)普通にdbt docs generateを実行するだけでも、dbt docsに内容が反映されました。

Exposuresを確認する

反映したら、dbt docsを見てみましょう。

まず、左側のメニューに「Exposures」が追加されており、その下に今回追加したものが反映されています(typeで指定したカテゴリ的なやつも、ここに反映されるようです)。

これをクリックすると、Exposuresの詳細を確認することができます。ymlファイルに記述した内容が反映されていますね。ちなみに、右上の「View this exposure」を押すと、urlパラメータに指定されているURLに遷移します。BIツール用のデータモデルであれば、そのBIツールのダッシュボードに飛ばす等が理想の設定でしょうか。

DAGも見ることが出来ます。depends_onで指定したデータモデルの依存関係がわかります。最終的には、別色で表現されたExposuresに集約されるようになっていました。

おわりに

データカタログのちょっとした代替になるかな?という感じでした(タグとかもつけれそうなので)。dbtの活用が進めば進むほど「これはどういう理由で作られたデータモデルなんだろう…」となるので、ある程度dbtに慣れてきたら、ぜひ活用していきたい機能ですね。