带DBT宏的动态柱的雪花透视(&P) [英] Snowflake "Pivot" for dynamic columns with dbt macro
本文介绍了带DBT宏的动态柱的雪花透视(&P)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
开始上下文:
有一个dbt_utils";Pivot&qot;函数。此问题与该函数无关。
有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屋!
查看全文