[英]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.