如何编写dbt宏将Unix整数转换为Snowflake中的datetime
Snowflake中使用dbt宏将Unix整数转换为datetime的语法问题
我有一个存储Unix整数的字段,需要在Snowflake中通过dbt宏将其转换为datetime。用纯SQL实现很简单,但始终搞不定dbt的转义语法。
我试过各种能搜到的方法,目前只有用{% raw %}标签硬编码值时能正常运行,但我需要用宏的输入参数来实现通用转换:
可行代码
{%- macro num_to_datetime(datetime_field) -%} {% raw %} DATEADD(MILLISECOND, 1683668421712 % 1000, DATEADD(SECOND, 1683668421712 / 1000, '19700101')) {% endraw %} {%- endmacro -%}
不可行代码(无法解析宏参数)
{%- macro num_to_datetime(datetime_field) -%} {% raw %} DATEADD(MILLISECOND, {{ datetime_field }} % 1000, DATEADD(SECOND, {{ datetime_field }}/ 1000, '19700101')) {% endraw %} {%- endmacro -%}
我还尝试用{% set %}标签把输入参数设为变量,但依然没生效,应该是语法问题。
补充说明:编写这个宏是为了实现自动化流程——我们用Python读取元数据生成staging view脚本,解析JSON并添加易读的业务列名;同时用该宏为特定字段应用默认转换逻辑,这样新源数据的导入只需要点击几次操作并执行dbt run就能完成。
内容的提问来源于stack exchange,提问作者Anton S.
相关产品推荐
相关产品推荐

