我很好奇是否可以将宏传递到另一个宏中,如下所示:
{% macro my_macro(a, b, another_macro) %}
...
{{ another_macro(a,b) }}
...
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
奖励: 如果 dbt 的框架允许它能够,我如何向它传递参数?
在 R 中它看起来像
my_callable_function <- function(another_function, ...) {
another_function(...)
}
Run Code Online (Sandbox Code Playgroud) 有时,我们的表需要将多个列附加在一起以形成唯一键。这可以通过执行以下操作来完成:
select
*,
col1 || "_" || col2 as unique_key
from
my_table
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但导致多个分析师之间缺乏统一性。
我想利用 python *args(我认为 jinja2 使用varargs)功能来制作一个宏,它可以接受任意数量的参数并在所有参数之间创建一个唯一的键。
理想结果:
select
*,
unique_key(col1, col1, ..., colN)
from
my_table
Run Code Online (Sandbox Code Playgroud) 首先,我是 dbt 的支持者!我喜欢这个工具和它的多功能性。
在阅读一些文档时,我注意到每次调用宏时我都可以对我的模式进行一些元工作。
其中之一是清理模式。
(这已根据 dbt slack 中的讨论进行了编辑)
dbt run-operation freeze这将内省所有将使用 dbt run 但使用自动生成的哈希(可能只是时间戳)编写的表。它会以我选择的模式输出这些表,并将“哈希”记录到控制台。
dbt run-operation unfreeze --args '{hash: my_hash}' 然后将继续查找使用该哈希前缀编写的表并将它们从架构中清除。