debugging 用基本直通宏重写dbt源函数失败

oaxa6hgo  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(78)

我在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关系对象,就像原始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


我已经检查了类似的问题,但这些都没有回答我上面的问题,例如:Overriding source macro in DBT to allow for dynamic sources for test runs
提前感谢任何线索/建议!

7d7tgy0s

7d7tgy0s1#

覆盖宏通常需要使用适配器调度配置,我假设同样适用于覆盖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
希望这能帮上一点忙!

sshcrbum

sshcrbum2#

以防万一有人得到类似的错误,在其中一个dbt模型的配置中,'tags'参数被定义了两次,这导致了错误。

相关问题