【问题标题】:DBT Macros to perform computations用于执行计算的 DBT 宏
【发布时间】:2020-12-01 10:30:20
【问题描述】:

我正在尝试编写一个能够进行各种计算并返回最终结果的宏。

宏是否只接受块级代码,如 if 或 for 循环?而不是一组单独的语句?

请帮帮我

谢谢

【问题讨论】:

  • SQL 不支持宏,所以我删除了标签。
  • 您能否添加更多上下文来说明您希望宏执行的操作?
  • 嗨 Dylan,请看一下这段代码code {% macro sum_items(column_1,column_2) %} ({{ column_1}}+{{column_1 }}) {% endmacro %} code 宏是否支持多行编码?我尝试向其中添加多行,但不一定相关,但编译后在模型中引发错误,因为生成的查询在语法上不正确
  • @GordonLinoff 谢谢,我不确定。因为我正在使用 dbt 宏和 SQL
  • 您能否编辑您的问题以提供一些示例来说明您正在尝试实现的目标,以及您已经尝试过的目标?事实上,提供具体答案太模糊了。也许还可以查看stackoverflow.com/help/how-to-ask,了解有关提问的一般建议。

标签: macros dbt


【解决方案1】:

您可以使用宏做很多事情。大多数原生 python 操作都是可能的,尽管是以一种笨拙的非 Python 方式(这里没有列表推导)。

例如,可以调用 python 内置数据类型的任何方法:

{% set my_base_models = [] %}

{% for i in graph.nodes.values() %}

   {% if i["name"].startswith('base_model') %}
       
        {% do my_list.append(i) %}

    {% endif %}

{% endfor %}

关键点:

  1. 使用任何状态改变方法(例如pop()append()等)调用{% do <obj>.<method>() %}来执行它
  2. 使用{% set <var> = <expression> %} 将结果放入变量中
  3. 查看标准 jinja 中的 filters and tests 以过滤和测试映射(字典)和列表
  4. 查看特定于 dbt 的 jinja context variables 和方法列表

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多