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

有趣的问题!几个问题:

  1. 您使用的是什么数据库?
  2. 您使用的是哪个版本的 dbt?
  3. 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
...

没问题。这是一个简单的修复,但我怀疑这是预期的行为。