簡體   English   中英

DBT 宏在我的 dbt model 中沒有返回任何內容

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

我在這里做錯了什么?

你的宏有兩個問題:

  1. 您不想使用return關鍵字。 return在 jinja 上下文中將數據傳回給調用者,但您實際上是在嘗試在此處編寫 SQL 代碼
  2. 數據不會流經 jinja 上下文。 當您編寫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.

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