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

DBT生成前一日日期报错:无format_datetime过滤器问题求助

解决DBT中"No filter named 'format_datetime'"报错问题

错误原因:Jinja2没有内置format_datetime过滤器,你之前的写法混淆了Python方法和Jinja语法。以下是两种可行的解决方式:

方法一:用Jinja调用Python datetime模块处理(跨数据库通用)

直接在Jinja编译阶段生成格式化后的日期,无需依赖数据库函数:

{% macro yesterday_date() %}
{% set yesterday = modules.datetime.datetime.today() - modules.datetime.timedelta(days=1) %}
{% set partition_key = yesterday.strftime('%Y-%m-%d') %}
{{ partition_key }}
{% endmacro %}

方法二:用目标数据库的日期格式化函数(适配不同数仓)

根据你使用的数据库,选择对应的写法:

  • BigQuery:

    {% macro yesterday_date() %}
    {{ dateadd('day', -1, current_date())|dateformat('%Y-%m-%d') }}
    {% endmacro %}
    

    或直接在SQL中写:FORMAT_DATE('%Y-%m-%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

  • Snowflake:

    {% macro yesterday_date() %}
    TO_CHAR(DATEADD(day, -1, CURRENT_DATE()), 'YYYY-MM-DD')
    {% endmacro %}
    
  • PostgreSQL:

    {% macro yesterday_date() %}
    TO_CHAR(CURRENT_DATE - INTERVAL '1 day', 'YYYY-MM-DD')
    {% endmacro %}
    

内容的提问来源于stack exchange,提问作者NIRAJ BAIS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:07