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
相关产品推荐
相关产品推荐

