簡體   English   中英

dbt 宏 - 使用 *args/**kwargs

[英]dbt macro - using *args/**kwargs

有時,我們的表需要將多個列附加在一起以形成唯一鍵。 這可以通過執行以下操作來完成:

select
    *,
    col1 || "_" || col2 as unique_key
from 
    my_table

這有效,但導致多個分析師之間缺乏統一性。

我想利用 pythons *args (我認為 jinja2 使用varargs )功能來制作一個宏,它可以接受任意數量的參數並在所有參數之間創建一個唯一的鍵。

理想結果:

select
    *,
    unique_key(col1, col1, ..., colN)
from 
    my_table

當前dbt_utils包中有一個宏,它執行類似的操作,稱為surrogate key 它過去只使用可變參數,現在也允許使用列表。

對於可變參數部分,它執行以下操作:

{%- for field in varargs %}
{%- set _ = field_list_xf.append(field) -%}
{%- endfor -%}

然后,您可以join()或遍歷該列表以執行任何您想做的事情。 在宏的情況下,它執行以下操作:

{%- for field in field_list_xf -%}

    {%- set _ = fields.append(
        "coalesce(cast(" ~ field ~ " as " ~ dbt_utils.type_string() ~ "), '')"
    ) -%}

    {%- if not loop.last %}
        {%- set _ = fields.append("'-'") -%}
    {%- endif -%}

{%- endfor -%}

暫無
暫無

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

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