我正在尝试创建一个 dbt 宏,它可以从宏的参数加载表。当我直接指定输入时,我可以做到这一点,例如:
ref('data_categories')
(data_categories
是真实的表名称)。但是,当操作字符串传递给 ref
时,我的问题出现了。下面是我的错误函数和编译时的错误。
{% macro my_fnc(prefix=None) %}
{% set load_table %}
{% if prefix is defined %}
{{ prefix }} ~ '_data_categories'
{% else %}
'data_categories'
{% endif %}
{% endset %}
{% set sql_statement %}
select *
from {{ ref( load_table ) }}
{% endset %}
...
{% endmacro %}
我的错误:
Model X depends on a node named '
'data_categories'
' which was not found
因为错误信息不明确,并且有一个符号
'
和空格,我现在的想法是{{ ref( load_table ) }}
有问题,因为Jinja无法理解load_table
的意图我天真的问题:什么是a正确地将我定义的表传递给 ref
使用块
set
命令会给您带来各种空格、回车等问题。您可以通过将标签声明从 {% ... %}
更改为 {%- ... -%}
来删除空格。但就你而言,我会完全删除块集标签:
{% macro my_fnc(prefix=None) %}
{% if prefix is defined %}
{% set load_table = prefix ~ '_data_categories' %}
{% else %}
{% set load_table = 'data_categories' %}
{% endif %}
{% set sql_statement %}
select *
from {{ ref( load_table ) }}
{% endset %}
...
{% endmacro %}