[英]DBT macro is not returning anything in my dbt model
我創建了一個宏,它從 full_name 中提取 last_name 並返回 last_name
{% macro parse_last_name(column_name) %}
{% if column_name is none %}
{{ return (column_name) }}
{% else %}
{{ return (column_name.split(',')[1]) }}
{%endif%}
{% endmacro %}
這在我的 dbt model 中調用
select
{{parse_last_name('FULL_NAME')}} AS LAST_NAME
from <table_schema>
但編譯的 SQL 是:
select
AS LAST_NAME
from <target_schema>
所以我的宏沒有返回任何東西。
我正在使用dbt run --select model_name.sql
model_name.sql 運行我的 model
我在這里做錯了什么?
你的宏有兩個問題:
return
關鍵字。 return
在 jinja 上下文中將數據傳回給調用者,但您實際上是在嘗試在此處編寫 SQL 代碼column_name.split(',')[1]
時,您實際上是在拆分作為字符串傳入的列的名稱,而不是來自該列的數據。 換句話說,您的宏等效於"LAST_NAME".split(",")[1]
你需要你的宏返回 SQL 來為你做這個解析。 像這樣的東西會起作用(在雪花上):
{% macro parse_last_name(column_name) %}
split_part({{ column_name }}, ',', 2)
{% endmacro %}
請注意,此使用SQL split_part
,因此當您的Z20F35E630DAF4DBFA4C38C5555555555555555555555555555555555555555555555555555555555555555555fafaf.3ffa68ffa68ffa68ffafafaft
select
split_part(LAST_NAME, ',', 2) AS LAST_NAME
from <target_schema>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.