gpt4 book ai didi

macros - dbt_project config-version :2 中宏的使用

转载 作者:行者123 更新时间:2023-12-04 15:19:22 25 4
gpt4 key购买 nike

我们的 dbt_project.yml 文件 config-version: 1 有两个跨不同增量模型的变量,我们使用一个名为 today() 的宏

vars:
start_date: '{{ today(offset_days=-1) }}'
end_date: '2999-12-31'
在测试迁移到 dbt 0.17.2, config-version:2 时,我们面临以下问题
Running with dbt=0.17.2
Encountered an error:
Compilation Error
Could not render {{ today(offset_days=-1) }}: 'today' is undefined
我们去年年底建立的宏。我相信 dbt 改变了引用宏变量的方式,但不确定如何解决这个问题。
-- returns current hour in YYYY-MM-DD-HH format,
-- optionally offset by N days (-N or +N) or M hours (-M or +M)
{%- macro current_hour(offset_days=0, offset_hours=0) -%}
{%- set now = modules.datetime.datetime.now(modules.pytz.utc) -%}
{%- set dt = now + modules.datetime.timedelta(days=offset_days, hours=offset_hours) -%}
{{- dt.strftime("%Y-%m-%d-%H") -}}
{%- endmacro -%}

-- returns current day in YYYY-MM-DD format,
-- optionally offset by N days (-N or +N) or M hours (-M or +M)
{%- macro today(offset_days=0, offset_hours=0) -%}
{{- current_hour(offset_days, offset_hours)[0:10] -}}
{%- endmacro -%}

-- accepts a timestamp string and returns a timestamo string
-- formatted like 'YYYY-MM-DD HH24:MI:SS.US', e.g. '2019-11-02 06:11:42.690000'
{%- macro dt_to_utc(ts_string) -%}
TO_CHAR({{ ts_string }}::TIMESTAMPTZ, 'YYYY-MM-DD HH24:MI:SS.US')
{%- endmacro -%}

最佳答案

我在本地尝试了这个并让它工作。除了上面要检查的东西,你是否也动了varsmodels 处于同一级别在您的 dbt_project.yml文件( docs )?

models:
...

vars:
start_date: '{{ today(offset_days=-1) }}'
end_date: '2999-12-31'

我真的很惊讶这有效!变量最适合硬编码对象而不是动态对象。
我很好奇——为什么不直接调用宏而不是使用变量?
当前的:
where created_at >= {{ var('start_date') }}
建议的:
where created_at >= {{ today(offset_days=-1) }}
话虽如此,我的蜘蛛侠感觉在这里有点刺痛——这段代码使你的 dbt 项目非幂等——如果你的 dbt 生产运行连续几天停止,这个过滤器将导致丢失数据。
通常我们会避免这样的模式。相反,我们使用我们现有的模型版本来构建任何截止日期——你可以看到更多的例子 here .

关于macros - dbt_project config-version :2 中宏的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63685440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com