今回の課題
dbtについて勉強をしていて、source関数というものを見つけ、
詳細を理解してみることにした。
sources機能とは
dbtの「DWHにロードされているローデータを」sourcesとして定義することができる機能。
基本的にFROM句にDWH内のローデータを記述する場合は、source関数を使用した方が良さそう。
※source機能を使用すると下記のような利点がある
- リネージにソースデータの情報も追加される。
source関数でモデルからソースを参照すると、リネージやドキュメントにも、どれがソースデータなのか反映されるようになる。 - メンテナンス性が上がる。
モデルがsourceを使わずにFROM句にテーブル名が書いてしまっていると、開発中にデータの問題が発生した場合に、どこから来たデータか分からず、デバッグの難易度が上ってしまう。
sourcesの定義方法
modelディレクトリ下のYAMLファイルを下記のように定義する。
これによって、dbt内でsourcesを定義することができる。
sources:
- name: [データセット名]
databases: [BigQueryで言うところのプロジェクト名, Snowflakeで言うところのDatabase名]
tables:
- name: [テーブル名1]
- name: [テーブル名2]
定義したsourcesの使い方
modelディレクトリ下の.sqlファイルに下記のように記述する。
select * from {{ source('[データセット名]', '[テーブル名]') }}
上記の.sqlファイルをdbt runなどで実行すると、下記のようにコンパイルされる。
select * from `[BigQueryのプロジェクト名]`.`[データセット名]`.`[テーブル名]`
以上のようなかたちで、source機能を使用することができた。
ちなみに、modelと同様にsourcesでもテストを実施したり、ドキュメントの自動生成を実施することができるようだった。
まとめ
dbtでFROM句でソースデータを指定する場合は、
source関数を使えばdbtのデータリネージにソースデータが反映されるのでデータのデバッグなどの時に便利。
参考記事