You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一GCP项目的dbt中跨多个BigQuery数据集编写查询?

dbt跨BigQuery多数据集查询实现方案

核心思路

不用修改全局target或profiles.yml的默认数据集配置,只需给每个模型单独指定目标数据集,并通过dbt的引用函数关联不同数据集的表即可。


1. 编写主模型代码

创建输出模型文件(比如models/dataset_z/table_thisistheoutput.sql),用ref()引用其他数据集的模型,代码如下:

{{ config(
  dataset='dataset_Z'
) }}

with 
  first_table as (
    select * from {{ ref('table_thishasinfo') }}
  ),
  second_table as (
    select * from {{ ref('table_thishasmoreinfo') }}
  )
select * 
from first_table ft
left join second_table st
on ft.id = st.id

2. 配置各模型的目标数据集

给table_thishasinfo、table_thishasmoreinfo这两个模型指定对应的数据集,有两种方式:

方式一:单模型配置(在模型文件顶部添加)

比如models/dataset_x/table_thishasinfo.sql:

{{ config(
  dataset='dataset_X'
) }}

-- 这里写该模型的原始逻辑,比如从源表读取数据
select * from ...

models/dataset_y/table_thishasmoreinfo.sql:

{{ config(
  dataset='dataset_Y'
) }}

-- 这里写该模型的原始逻辑
select * from ...

方式二:批量配置(在dbt_project.yml中设置)

按模型所在目录分组,批量指定数据集,避免重复配置:

models:
  your_dbt_project_name:  # 替换成你的dbt项目名称
    dataset_x:
      +dataset: dataset_X
    dataset_y:
      +dataset: dataset_Y
    dataset_z:
      +dataset: dataset_Z

3. 源表的特殊处理(如果引用的是非dbt生成的表)

如果table_thishasinfo和table_thishasmoreinfo是BigQuery中已存在的源表(不是dbt模型生成的),则用source()代替ref():

首先在models/sources.yml中定义源:

sources:
  - name: projectA
    dataset: dataset_X
    tables:
      - name: table_thishasinfo
  - name: projectA
    dataset: dataset_Y
    tables:
      - name: table_thishasmoreinfo

然后在主模型中引用:

{{ config(
  dataset='dataset_Z'
) }}

with 
  first_table as (
    select * from {{ source('projectA', 'table_thishasinfo') }}
  ),
  second_table as (
    select * from {{ source('projectA', 'table_thishasmoreinfo') }}
  )
select * 
from first_table ft
left join second_table st
on ft.id = st.id

4. 验证编译结果

运行dbt compile命令,查看target/compiled目录下的对应SQL文件,就能得到你预期的带完整projectA.dataset_X.table_thishasinfo格式的SQL代码。


内容的提问来源于stack exchange,提问作者Akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:05:26