簡體   English   中英

使用 Sql 和 Jinja 的 DBT 宏

[英]DBT Macro using Sql and Jinja

我已經編寫了 DBT 宏,但在嘗試部署時出現錯誤。 我認為它沒有轉換為正確的 sql。

MoMCalc.sql

{% macro MoMCalc(val,Effectivedate,Frequency) %}
case
when "Frequency" LIKE '%Weekly%' then {{val}} - LAG({{val}}, 4) OVER (Order by '{{Effectivedate}}')
when "Frequency" LIKE '%Monthly%' then {{val}} - LAG({{val}}, 1) OVER (Order by '{{Effectivedate}}')
end
{% endmacro %}

錯誤 -

syntax error line 32 at position 0 unexpected 'case'.
20:33:23    syntax error line 33 at position 53 unexpected 'Value'.
20:33:23    syntax error line 33 at position 63 unexpected 'OVER'.
20:33:23    syntax error line 33 at position 88 unexpected 'Date'

target/compiled/目錄下可以查看編譯后的代碼。 (您需要查找調用此宏的 model 文件的編譯版本)。 這會讓您了解哪里出了問題。

我實際上認為您在 model 文件中調用宏之前可能只是缺少一個逗號?

我的另一個猜測(上下文有限)是您沒有在宏中名為Frequency的參數周圍使用卷曲。 這應該有效,假設您希望在 SQL 中圍繞傳遞給Frequency的值使用雙引號:

{% macro MoMCalc(val, Effectivedate, Frequency) %}
case
    when "{{ Frequency }}" like '%Weekly%'
    then {{ val }} - lag({{ val }}, 4) over (order by '{{Effectivedate}}')
    when "{{ Frequency }}" like '%Monthly%'
    then {{ val }} - lag({{ val }}, 1) over (order by '{{Effectivedate}}')
end
{% endmacro %}

然后調用您要使用的宏:

select
    another_field,
    MoMCalc('value_field', 'effective_date_field', 'frequency_field') as mom_calc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM