我在 dbt 项目的 Macros/ 文件夹中的文件中覆盖了 ref 宏。
{%- macro ref(table_name) -%}
{% set relation = builtins.ref(table_name) %}
{% do return(relation) %}
{%- endmacro -%}
当我尝试使用 dbt run --models xxx 运行任何模型时,会导致以下错误:
Encountered an error:
keyword argument repeated: tags (<template>, line 12)
如果我删除该文件,则 dbt 模型将按预期运行。
我希望这个宏返回 dbt Relation 对象,就像原始 dbt 源函数一样。
还尝试过覆盖源宏,得到相同的结果:
{%- macro source(source_name, table_name) -%}
{% set rel = builtins.source(source_name, table_name) %}
{{ rel }}
{%- endmacro -%}
和
{%- macro source(source_name, table_name) -%}
{% set rel = builtins.source(source_name, table_name) %}
{% do return(rel) %}
{%- endmacro -%}
我在这里看到了类似的用法 - 覆盖源函数 - 这正是我想要做的:https://medium.com/checkout-com-techblog/dbt-modeling-at-scale-2614202bb5d0
跑步:
dbt-core==1.6.6
dbt-refshift==1.6.2
Python 3.9.13
我已经检查过类似的问题,但这些问题并没有回答我上面的问题,例如: 覆盖 DBT 中的源宏以允许动态源进行测试运行
提前感谢您的任何线索/建议!
覆盖宏通常需要使用适配器调度配置,我认为这也适用于覆盖 ref 函数。
所以例如
-- macros/ref.sql
{% macro ref(table_name) %}
{{ return(adapter.dispatch('ref')(table_name)) }}
{% endmacro %}
{% macro default__ref(table_name) %}
{% set relation = builtins.ref(table_name) %}
{% do return(relation) %}
{% endmacro %}
在此处查看更多内容https://docs.getdbt.com/reference/dbt-jinja-functions/dispatch
希望这对前进有所帮助!