小编Rei*_*ams的帖子

dbt 宏可以接受其他宏作为参数吗?

我很好奇是否可以将宏传递到另一个宏中,如下所示:

{% 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)

jinja2 dbt

7
推荐指数
2
解决办法
7460
查看次数

dbt 宏 - 使用 *args/**kwargs

有时,我们的表需要将多个列附加在一起以形成唯一键。这可以通过执行以下操作来完成:

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)

sql jinja2 snowflake-cloud-data-platform dbt

3
推荐指数
1
解决办法
3055
查看次数

dbt 宏在 sql 调用中迭代列表中的项目?

首先,我是 dbt 的支持者!我喜欢这个工具和它的多功能性。

在阅读一些文档时,我注意到每次调用宏时我都可以对我的模式进行一些元工作。

其中之一是清理模式。

这已根据 dbt slack 中的讨论进行了编辑

  1. dbt run-operation freeze这将内省所有将使用 dbt run 但使用自动生成的哈希(可能只是时间戳)编写的表。它会以我选择的模式输出这些表,并将“哈希”记录到控制台。

  2. dbt run-operation unfreeze --args '{hash: my_hash}' 然后将继续查找使用该哈希前缀编写的表并将它们从架构中清除。

sql database list jinja2 dbt

2
推荐指数
1
解决办法
3353
查看次数