この記事では、単一の dbt プロジェクト内で複数の BigQuery データセットを管理する方法について紹介します。
問題点
dbt と BigQuery を使用する場合、大半のケースで単一の dbt プロジェクト内で複数の BigQuery データセットを管理する必要があるかと思います。
しかし、デフォルトでは dbt はprofiles.yml
に定義された一つのターゲットスキーマ(データセット)で動作するため、単一の dbt プロジェクト内では単一の BigQuery データセットしか使用できません。
解決方法
ここではその問題の解決方法を記載します。
モデル単位でスキーマを設定する
まずは、モデルの config でターゲットスキーマを指定する方法です。
モデルに以下を定義することでターゲットスキーマを指定できます。
マクロを使用してスキーマを設定する
次に、macro で動的にスキーマを判定する方法です。モデル側の config ブロックで schema を定義することでこのマクロを使用できます。
override_default_macros.sql
という名前で macro を設定することで、以下のようなロジックでスキーマを動的に定義可能です。
custom_schema_name
が設定されていない場合はprofiles.yml
に設定されたデフォルトのスキーマを使用する
custom_schema_name
が設定されている場合はそのスキーマを使用する
マクロの記述方法を工夫することで、ターゲットスキーマ名を動的に定義することも可能です。
まとめ
この記事では、単一の dbt プロジェクト内で複数の BigQuery データセットを管理する方法について紹介しました。
紹介した二つの手法を使い分けることで、bigquery の dbt プロジェクトを柔軟に設定することが可能になります。
参考