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

在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解析时出现了异常。你可以改用变量文件的方式传递参数:

  1. 创建一个vars.yml文件:
company_uuid: "0703afd3_496b_4ed5_8e0c_594b71f4718b"
dataset: "airbyte_mumbai"
  1. 执行DBT命令:
dbt compile --vars-file vars.yml --models tag:copy_reports

这种方式能避免Shell对JSON格式的干扰,确保变量正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:08:10