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

dbt宏参数未编译求助:调用宏时参数丢失

问题原因

你调用宏时直接传入InicioPrev这类裸列名,dbt会将其视为Jinja变量而非列名。由于未定义对应变量,编译时该变量会被替换为空值,最终出现try_cast( as timestamp)的结果。

解决方案

有两种常用修正方式:

方式1:传递字符串参数并适配标识符

修改宏的写法,让它能将字符串参数转为数据库识别的列标识符:

{% macro convert_to_timestamp(column_name) %}
try_cast({{ adapter.quote(column_name) }} as timestamp)
{% endmacro %}

调用宏时,把列名用引号包裹作为字符串传入:

select
SMP,
{{ convert_to_timestamp('InicioPrev') }} as InicioPrev,
{{ convert_to_timestamp('FimPrevisao') }} as FimPrevisao
from {{ ref('src_smp_programado') }}

adapter.quote()会根据你使用的数据库(如Snowflake、BigQuery等)自动添加正确的引号,确保列名被正确识别。

方式2:直接传递列标识符(简化写法)

如果不想修改宏,也可以在调用时用括号包裹列名,让dbt将其视为字符串字面量而非变量:

select
SMP,
{{ convert_to_timestamp(('InicioPrev')) }} as InicioPrev,
{{ convert_to_timestamp(('FimPrevisao')) }} as FimPrevisao
from {{ ref('src_smp_programado') }}

宏里的{{ column_name }}会直接输出传入的列名,无需额外适配。

内容的提问来源于stack exchange,提问作者Maurício Schwartsman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:11:02