【发布时间】:2023-02-24 08:24:00
【问题描述】:
我有一个名为 dbt_helpers 的 DBT 包,我打算在其中覆盖一些 dbt 的内置全局宏。在此示例中,我打算覆盖宏 dbt_spark_validate_get_file_format,它存在于 dbt spark 适配器 here 中。
我参考了指定here 的 dbt 文档来实现我的用例。这是我在包的macros 文件夹下的包中实现宏的方法。
{% macro dbt_spark_validate_get_file_format(raw_file_format) -%}
{{ return(adapter.dispatch('dbt_spark_validate_get_file_format','dbt_helpers')(raw_file_format)) }}
{%- endmacro %}
{% macro default__dbt_spark_validate_get_file_format(raw_file_format) %}
{% do log('overriding global macro', info=true) %}
{# Custom implementation here #}
{% endmacro %}
我使用了与我的包名称相同的宏命名空间dbt_helpers。我在我的主要 DBT 项目中将其指定为 packages.yml 中的一个包,并且在运行命令 dbt deps 后,我能够看到在 dbt_packages 目录中定义的宏。在我的主要 dbt 项目的 dbt_project.yml 中,我已经包含了项目级调度配置以从我的包中获取宏,如图所示,如 dbt 文档的 this 部分中所述。
dispatch:
- macro_namespace: dbt
search_order: ['dbt_helpers','dbt']
然而,当我运行我的 dbt 模型时,我的包中定义的宏没有被调用,而是内置的全局宏仍在被调用。我可以通过将宏直接放在我的项目宏文件夹中来覆盖宏,但我需要从我的dbt_helpers包中覆盖宏。我怎样才能做到这一点?
【问题讨论】:
标签: python apache-spark dbt