Od czasu do czasu nasze tabele muszą dołączyć wiele kolumn razem, aby wykonać unikalny klucz. Można to zrobić, robiąc coś w rodzaju:

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

Działa to, ale nadaje mu braku jednolitości wśród wielu analityków.

Chciałbym wykorzystać Pythony *args (Myślę, że Jinja2 korzysta z funkcji varargs), aby zrobić makro, które może zająć dowolną ilość argumentów i stworzyć unikalny klucz między nimi.

Idealny wynik:

select
    *,
    unique_key(col1, col1, ..., colN)
from 
    my_table
3
Reid Williams 14 październik 2020, 21:26

1 odpowiedź

Najlepsza odpowiedź

Obecnie jest makro w DBT_UTILS, który robi coś podobnego, zwanego Klucz zastępczy. Używany do używania tylko Varargs, a teraz umożliwia również listę.

Dla części Varargs wykonuje następujące czynności:

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

Możesz wtedy join() lub iterować tę listę, aby zrobić wszystko, co chcesz. W przypadku makra wykonuje następujące czynności:

{%- 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 -%}
3
dylanbaker 14 październik 2020, 18:44