DBT重写模型名称:解决跨源同表名模型冲突问题
解决方案
要在dbt中生成不同schema下的同名patient表且不修改模型文件名,可通过以下两种方式实现:
方式一:在项目配置文件中批量指定schema
在项目根目录的dbt_project.yml里,针对不同文件夹下的模型配置独立的schema:
models: # 替换成你的dbt项目名称 your_dbt_project: source1: # 配置该文件夹下所有模型生成到source1对应的schema +schema: source1_schema source2: # 配置该文件夹下所有模型生成到source2对应的schema +schema: source2_schema
这种方式适合批量管理同一文件夹下的模型,每个子文件夹对应一个数据源的schema。
方式二:在单个模型文件中单独配置schema
在每个patient.sql文件的开头添加config指令,指定生成表的schema:
source1文件夹下的patient.sql
{{ config(schema='source1_schema') }} select * from {{ source('source1', 'patient') }}
source2文件夹下的patient.sql
{{ config(schema='source2_schema') }} select * from {{ source('source2', 'patient') }}
这种方式更灵活,适合单个模型的个性化配置。
关键说明
dbt判断模型唯一性的依据是模型的完整路径(项目名+文件夹+模型名),而非仅模型文件名。只要两个patient模型在不同的子文件夹下,即使文件名相同,dbt也会识别为两个独立模型,不会触发同名报错,最终会在指定的不同schema下生成同名的patient表,完全符合需求。
内容的提问来源于stack exchange,提问作者Ajmal Moideen
相关产品推荐
相关产品推荐

