【问题标题】:How can I use {{this}} as a parameter in a dbt jinja macro?如何在 dbt jinja 宏中使用 {{this}} 作为参数?
【发布时间】:2021-09-22 10:22:32
【问题描述】:

如何使用 {{this}} 作为配置函数中宏的参数传递当前模型的名称?

我尝试了几个选项,但没有一个有效。 模型/Table1.sql

{{ config(post_hook= calculate_test("{{this}}") ) }}

宏/calculate_test.sql

{% macro calculate_test(tableN) %}
   
    {%- set tableName = tableN -%}

    {% set sql %}

        SELECT 
            COUNT(*) as cnt
        FROM {{ tableName }}

    {% endset %}

    {% set results = run_query(sql) %}

{% endmacro %}

错误是:

【问题讨论】:

    标签: jinja2 dbt


    【解决方案1】:

    你快到了!唯一的问题是你有额外的大括号和放错位置的引号。整个配置块是 Jinja,所以你不需要在“this”周围加上花括号。

    {{ config(post_hook= “calculate_test(this)” ) }}
    

    【讨论】:

    • 您好,感谢您的回答!不幸的是,这种方式也没有奏效。但是它的工作原理是这样的:“{{calculate_test(this)}}”
    • 很高兴听到。您在{{ config(...) }} 块中的用法是否像您在问题中给出的那样?因为如果不是,那么为什么在宏名称周围有{{ 是有道理的。可能值得为未来的人编辑您的问题——这是 Jinja 难以理解的一个方面!
    • 是的,宏在 config() 中,如上例所示;但是在我运行模型时没有添加括号,宏不会被执行,这就是我添加它们的原因
    • 奇怪!所以你在配置周围有花括号,在你的宏语句周围有花括号?确实希望看到这一点,但也许就是这样。我会做一些测试并更新我的答案,尽管听起来你是对的。
    • 确实,我有 2 组大括号:{{ config( post_hook= "{{calculate_test(this)}}") }}
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多