業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【データ基盤】
データハブとは
Ajust
データの保守運用
AI

執筆者:Handbook編集部

dbtで複数のbigqueryデータセットを扱う

この記事では、単一の dbt プロジェクト内で複数の BigQuery データセットを管理する方法について紹介します。

問題点

dbt と BigQuery を使用する場合、大半のケースで単一の dbt プロジェクト内で複数の BigQuery データセットを管理する必要があるかと思います。 しかし、デフォルトでは dbt はprofiles.ymlに定義された一つのターゲットスキーマ(データセット)で動作するため、単一の dbt プロジェクト内では単一の BigQuery データセットしか使用できません。

解決方法

ここではその問題の解決方法を記載します。

モデル単位でスキーマを設定する

まずは、モデルの config でターゲットスキーマを指定する方法です。

モデルに以下を定義することでターゲットスキーマを指定できます。

{{
  config(
    enabled = true,
    database = "Google Cloudのプロジェクト名",
    schema = "データセット名"
  )
}}

マクロを使用してスキーマを設定する

次に、macro で動的にスキーマを判定する方法です。モデル側の config ブロックで schema を定義することでこのマクロを使用できます。

override_default_macros.sqlという名前で macro を設定することで、以下のようなロジックでスキーマを動的に定義可能です。

  • custom_schema_nameが設定されていない場合はprofiles.ymlに設定されたデフォルトのスキーマを使用する
  • custom_schema_nameが設定されている場合はそのスキーマを使用する
-- By default, custom schema name will be combined with target.schema name
-- Override this schema to based on requirements

{% macro generate_schema_name(custom_schema_name, node) -%}
    {%- set default_schema = target.schema -%}

    {%- if custom_schema_name is none -%}
        {{ default_schema }}
        {{ log("Setting Default Schema: {0}".format(target.schema)) }}
    {%- else -%}
        {{ custom_schema_name | trim }}
        {{ log("Setting Custom Schema: {0}".format(custom_schema_name | trim)) }}
    {%- endif -%}

{%- endmacro %}

マクロの記述方法を工夫することで、ターゲットスキーマ名を動的に定義することも可能です。

まとめ

この記事では、単一の dbt プロジェクト内で複数の BigQuery データセットを管理する方法について紹介しました。 紹介した二つの手法を使い分けることで、bigquery の dbt プロジェクトを柔軟に設定することが可能になります。

参考

2025年07月06日に最終更新
読み込み中...