我很好奇是否可以将宏传递到另一个宏中,如下所示:
{% macro my_macro(a, b, another_macro) %}
...
{{ another_macro(a,b) }}
...
{% endmacro %}
奖金: 如果 dbt 的框架允许我如何向它传递参数?
在 R 中它看起来像
my_callable_function <- function(another_function, ...) {
another_function(...)
}
在 dbt cloud 的 slack 上进行的一次对话以及一些戳戳和刺激给了我答案。
是的您可以将嵌套宏传递到宏中,就像不同语言中的嵌套函数一样!
一个例子可能是这样的!
{% macro base_macro(func1, arg1, arg2) %}
{{ func1(arg1, arg2) }}
{% endmacro %}
我不确定,但如果你正在计算 dbt 中的某些内容
{% macro sum_of_two_columns(a, b) %}
a + b
{% endmacro %}
然后在你的模型文件中你会看到类似的东西
select
revenue1,
revenue2,
{{ sum_of_two_columns('revenue1','revenue2') }} as total_revenue
from [table]
现在您可以在要创建的第二个宏中传递total_revenue:例如:
{% macro subtracting_column(a) %}
a - 100
{% endmacro %}
终于可以使用它了:
select
revenue1,
revenue2,
{{ sum_of_two_columns('revenue1','revenue2') }} as total_revenue,
{{ subtracting_column('total_revenue') }} as adjusted_revenue
from [table]
简而言之,您将把一个宏的结果传递给另一个宏,这就是您想要的