Snowflake替代像Hive的LATERAL VIEW STACK这样的非透视数据的方法是什么?

cclgggtu  于 2023-05-17  发布在  Hive
关注(0)|答案(1)|浏览(238)

我需要将Hive的SQL版本移植到Snowflake。hive脚本由LATERAL VIEW STACK ()函数组成。我怎么能unpivot多列与别名上 snowflake ?我在下面提供了一个例子。

SELECT 
    t.date,
    t.country,
    t.Metric_Name,
    t.Metric_Category,
    t.Metric_Numerator,
    t.Metric_Denominator 
FROM table -- containing dimensions and metrics
LATERAL VIEW STACK (4,
    date, country, "Metric 1", "Metric Category 1", metric_1_num, metric_1_denom,
    date, country, "Metric 2", "Metric Category 1", metric_2_num, metric_2_denom,
    date, country, "Metric 3", "Metric Category 2", metric_3_num, metric_3_denom,
    date, country, "Metric 4", "Metric Category 2", metric_4_num, metric_4_denom
    ) t as date, country, Metric_Name, Metric_Category, Metric_Numerator, Metric_Denominator;

Metric_Denominator = metric_num+metric_denom。

样本数据

未旋转输出

6qqygrtg

6qqygrtg1#

如果你想在Snowflake中取消数据透视,我建议使用横向连接:

SELECT t.date, t.country, v.*
FROM table t CROSS JOIN LATERAL
     (VALUES ('Metric 1', 'Metric Category 1', t.metric_1_num, t.metric_1_denom),
             ('Metric 2', 'Metric Category 1', t.metric_2_num, t.metric_2_denom),
             ('Metric 3', 'Metric Category 2', t.metric_3_num, t.metric_3_denom),
             ('Metric 4', 'Metric Category 2', t.metric_4_num, t.metric_4_denom)
    ) v(Metric_Name, Metric_Category, Metric_Numerator, Metric_Denominator);

请注意,横向连接是标准SQL的一部分。
也可以使用union all

SELECT t.date, t.country, 'Metric 1', 'Metric Category 1', t.metric_1_num, t.metric_1_denom
FROM t
UNION ALL
SELECT t.date, t.country, 'Metric 2', 'Metric Category 2', t.metric_2_num, t.metric_2_denom
FROM t
UNION ALL
SELECT t.date, t.country, 'Metric 3', 'Metric Category 3', t.metric_3_num, t.metric_3_denom
FROM t
UNION ALL
SELECT t.date, t.country, 'Metric 4', 'Metric Category 4', t.metric_4_num, t.metric_4_denom
FROM t;

相关问题