升级dbt后调用dbt_utils.datediff宏遇'dict object'编译错误求助
解决dbt v1.3+中dbt_utils.datediff宏编译错误的方案
1. 修正宏参数传递错误
你的代码中dbt_utils.datediff的参数传递不符合dbt_utils 1.0.0的要求:
{{ dbt_utils.datediff( 'previous_tstamp', 'timestamp', -- 此处错误,应为结束日期字段(如当前记录的时间戳字段) 'second' ) }}
dbt_utils 1.0.0的datediff宏正确参数顺序为:start_date, end_date, datepart。你需要传入实际的结束日期字段(例如当前记录的时间戳字段,假设为tstamp),而非字符串'timestamp'。修正示例:
{{ dbt_utils.datediff( 'previous_tstamp', 'tstamp', 'second' ) }} AS period_of_inactivity
2. 重新安装并加载dbt_utils包
- 确认
dbt_project.yml的packages配置无误:packages: - package: dbt-labs/dbt_utils version: "1.0.0" - 清理本地缓存与旧包文件,重新执行安装与编译:
rm -rf dbt_packages/ target/ dbt deps dbt compile
3. 检查宏路径与冲突问题
- 确保
dbt_project.yml的macro-paths未覆盖默认路径,导致dbt无法加载dbt_utils的宏。若自定义了宏路径,需包含dbt_utils的宏目录:macro-paths: ["macros", "dbt_packages/dbt_utils/macros"] - 排查是否存在自定义宏与dbt_utils的宏重名(如你自己定义了
datediff宏),这种冲突会导致dbt优先加载自定义宏,无法识别官方包的宏。
4. 验证宏文件存在性
检查本地dbt_packages/dbt_utils/macros/date目录下是否存在datediff.sql和datespine.sql文件。若文件缺失,说明dbt deps安装不完整,需重新执行安装命令。
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

