带DBT宏的动态柱的雪花透视(&P) [英] Snowflake "Pivot" for dynamic columns with dbt macro

查看:18
本文介绍了带DBT宏的动态柱的雪花透视(&P)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

开始上下文:

  1. 有一个dbt_utils";Pivot&qot;函数。此问题与该函数无关

  2. somediscussion关于Snowflake内置PIVOT的限制,即无法为此函数使用动态列和/或值。

example_model.sql

with pivot as (
    select * 
    from {{ ref('my_base_model') }}
        pivot( sum(VALUE) for KEY in ( 
        {{ dbt_utils.get_column_values(table=ref('my_base_model'), column='KEY') }} 
        ) )
)

select * from pivot

DBT很容易地解决了这个问题,只有一个问题除外。编译以上代码时(下面的代码挡路),当Snowflake期望更像元组(...)

时,它会将值生成为蟒蛇列表[...]
with pivot as (
    select * 
    from DB.SCHEMA.my_base_model
        pivot( sum(VALUE) for KEY in ( ['value_1', 'value_2', 'value_3', 'value_4', 'value_5', 'value_6', 'value_7'] ) )
)

select * from pivot

我正在研究使用类似as_native的方法将结果列表转换为元组,但到目前为止还没有成功。

dbt run中的错误:

001003 (42000): SQL compilation error:
  syntax error line 5 at position 39 unexpected '['.
  syntax error line 5 at position 961 unexpected ']'.
  compiled SQL at target
undbtprojectmodelsstagingmy_application
my_base_model.sql

推荐答案

可能不是最佳答案,但可行的答案是:

pivot_model.sql

{% set pivot_cols = dbt_utils.get_column_values(table=ref('my_base_model'), column='KEY') %}

with pivot as (
    select * 
    from {{ ref('my_base_model') }}
        pivot( sum(VALUE) for KEY in (
            {% for pivot_col in pivot_cols %}
                '{{pivot_col}}'{% if not loop.last %}, {% endif%}
            {% endfor %}
         ))
)

select * from pivot

这篇关于带DBT宏的动态柱的雪花透视(&P)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆