DBT 宏忽略前导 if 块
DBT macro ignores leading if block
我定义了一个以以下开头的宏:
{% macro my_macro(table, first=false) %}
{%- if first -%} WITH
{%- else -%} ,
{% endif %}
tmp AS (...
在编译的SQL中我看到这个完全被忽略了。如果我在第一个 CTE 之后粘贴这个完全相同的块,它可以正常插入。如果我在 if-block 之前放置任何文本,它也会呈现 if-block 的文本+内容。
我不明白这种行为。我怎样才能让这个宏以 WITH 或 "," 开头?
即使我用 true
替换 first
它也不会出现。
附加信息:
我正在使用 BigQuery 和 dbt 版本 0.18.2
有趣的问题!几个问题:
- 您使用的是什么数据库?
- 您使用的是哪个版本的 dbt?
first
您的查询来自哪里?
在 Azure Synapse 和 dbt 版本 0.18.1 上,我能够成功使用以下内容:
{% set first = true %}
{%- if first -%}
WITH
{%- else -%} ,
{% endif %}
top_100 AS (
SELECT 100 AS MyNumber
),
top_10 AS (
SELECT TOP 10 * FROM top_100
)
SELECT * FROM top_10
经过反复试验,我意识到使用“-”来减少第一行的白色 space 以某种方式也删除了它后面的文本。
所以
{%- if first -%}
WITH
...
不起作用,但是
{% if first %}
WITH
...
没问题。这是一个简单的修复,但我怀疑这是预期的行为。
我定义了一个以以下开头的宏:
{% macro my_macro(table, first=false) %}
{%- if first -%} WITH
{%- else -%} ,
{% endif %}
tmp AS (...
在编译的SQL中我看到这个完全被忽略了。如果我在第一个 CTE 之后粘贴这个完全相同的块,它可以正常插入。如果我在 if-block 之前放置任何文本,它也会呈现 if-block 的文本+内容。
我不明白这种行为。我怎样才能让这个宏以 WITH 或 "," 开头?
即使我用 true
替换 first
它也不会出现。
附加信息: 我正在使用 BigQuery 和 dbt 版本 0.18.2
有趣的问题!几个问题:
- 您使用的是什么数据库?
- 您使用的是哪个版本的 dbt?
first
您的查询来自哪里?
在 Azure Synapse 和 dbt 版本 0.18.1 上,我能够成功使用以下内容:
{% set first = true %}
{%- if first -%}
WITH
{%- else -%} ,
{% endif %}
top_100 AS (
SELECT 100 AS MyNumber
),
top_10 AS (
SELECT TOP 10 * FROM top_100
)
SELECT * FROM top_10
经过反复试验,我意识到使用“-”来减少第一行的白色 space 以某种方式也删除了它后面的文本。 所以
{%- if first -%}
WITH
...
不起作用,但是
{% if first %}
WITH
...
没问题。这是一个简单的修复,但我怀疑这是预期的行为。