如何在dbt中加载BigQuery分片表作为数据源?
处理BigQuery分片表的dbt数据源配置方案
方案一:BigQuery视图 + dbt源定义
dbt的schema.yml不支持直接用通配符指定表名,最直接的解决方式是先在BigQuery层聚合分片表:
- 在BigQuery中创建视图,自动包含所有
ad_d_*分片表:
这个视图会自动识别新增的分片表,不需要手动更新。CREATE OR REPLACE VIEW `你的项目ID.funnel_io_ads.ad_combined` AS SELECT * FROM `你的项目ID.funnel_io_ads.ad_d_*` - 修改dbt的schema.yml,将这个视图定义为源:
version: 2 sources: - name: funnel_io_ads tables: - name: ad_combined description: 聚合所有ad_d_*分片表的视图
方案二:dbt自定义宏动态查询
如果不想创建额外视图,可通过dbt宏生成带通配符的查询:
- 编写宏文件(比如
macros/get_sharded_ad_data.sql):{% macro get_sharded_ad_data() %} SELECT * FROM `你的项目ID.funnel_io_ads.ad_d_*` {% endmacro %} - 在dbt模型中直接调用宏:
每次运行模型都会自动查询所有分片表,无需手动维护配置。{{ get_sharded_ad_data() }}
关于增量模型的说明
增量模型更适合逐步加载新增数据的场景,如果只是需要一次性查询全部分片表,上面两种方案更高效。若后续要仅加载当月新增分片,可结合增量模型和宏,在增量过滤条件中匹配分片表的年月后缀。
内容的提问来源于stack exchange,提问作者Christoph
相关产品推荐
相关产品推荐

