使用基本直通宏覆盖 dbt 源函数失败

问题描述 投票:0回答:1

我在 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 中的源宏以允许动态源进行测试运行

提前感谢您的任何线索/建议!

python debugging amazon-redshift sandbox dbt
1个回答
0
投票

覆盖宏通常需要使用适配器调度配置,我认为这也适用于覆盖 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

希望这对前进有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.