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