在DBT中无法在adapter.get_relation内使用Jinja变量
解决DBT中
adapter.get_relation使用Jinja变量拼接失败的问题 你遇到的核心问题是通过--vars传递的company_uuid变量没有被正确解析,导致拼接后的表名缺失了UUID部分,最终触发"表不存在"的错误。
问题根源
在DBT中,通过命令行--vars传递的全局变量,不能直接通过变量名直接引用,必须使用var()函数来获取。你当前的代码直接写了company_uuid,Jinja会把它视为未定义的变量,默认返回空字符串,所以拼接后的the_var就只剩下amazon_full_orders_denormalized_了。
修复方案
把代码中的company_uuid替换成var('company_uuid'),修改后的代码如下:
{% set the_var = 'amazon_full_orders_denormalized_' ~ var('company_uuid') %} {{ log(the_var, info=True) }} {%- set source_relation = adapter.get_relation( database='282615', schema='airbyte_mumbai', identifier= the_var ) -%}
额外验证步骤
为了确认变量是否正确传递,你可以在日志中添加company_uuid的打印,方便排查:
{{ log("传递的company_uuid值: " ~ var('company_uuid'), info=True) }}
执行命令后,如果日志能正确输出你传递的UUID,说明变量已经被正确解析,拼接后的表名也会符合预期。
可选:避免Shell解析问题
如果修改后还是有问题,可能是命令行的--vars参数被Shell解析时出现了异常。你可以改用变量文件的方式传递参数:
- 创建一个
vars.yml文件:
company_uuid: "0703afd3_496b_4ed5_8e0c_594b71f4718b" dataset: "airbyte_mumbai"
- 执行DBT命令:
dbt compile --vars-file vars.yml --models tag:copy_reports
这种方式能避免Shell对JSON格式的干扰,确保变量正确传递。
内容的提问来源于stack exchange,提问作者Manan kshatriya
相关产品推荐
相关产品推荐

