我试图将 dbt 模型中的日期变量设置为 7 天前的日期。该模型将针对 Redshift 数据库运行。我已执行以下操作来设置变量,但是收到错误 DATE_ADD 未定义:
{%- set start_date = TRUNC(DATE_ADD(day, -7, CURRENT_DATE)) -%}
设置变量的正确方法是什么。
jinja 是一种模板语言。当您运行 dbt 时,它首先执行 jinja 来“编译”您的模型,然后then它针对您的数据库执行您编译的代码。
jinja 没有调用的函数trunc
or date_add
or current_date
,因为这些是 SQL 函数。
你有两个选择:
-
将变量设置为等于string并包括那个string在您的模型代码中,以便数据库计算该日期。看起来像这样(注意额外的引号):
{%- set start_date = "TRUNC(DATE_ADD(day, -7, CURRENT_DATE))" -%}
select {{ start_date }}
如果你编译它并检查你的代码中生成的代码target
目录,你会看到它变成了这样的 SQL:
select TRUNC(DATE_ADD(day, -7, CURRENT_DATE))
-
使用 jinja 的上下文来计算日期并将日期文字包含在 SQL 中。 dbt 的 jinja 上下文包含一个特殊变量,称为run_started_at https://docs.getdbt.com/reference/dbt-jinja-functions/run_started_at,还有 Python 的datetime module https://docs.getdbt.com/reference/dbt-jinja-functions/modules。将它们放在一起看起来像这样:
{%- set start_datetime = run_started_at - modules.datetime.timedelta(days=7) -%}
{%- set start_date = start_datetime.strftime("%Y-%m-%d") -%}
select '{{ start_date }}'
这将编译为:
select '2023-01-12'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)