将Presto表行转列为指定格式,是否应使用Pivot?
结论:不需要用Pivot,应该用Unpivot操作
你的需求是把宽表(多列)转换为窄表(两列,列名+对应值),这属于**逆透视(Unpivot)**场景,和Pivot(透视,行转列)的作用完全相反。
在Presto中,可以用UNNEST结合ARRAY和MAP来实现这个转换,示例SQL如下:
SELECT column_name, value FROM your_table CROSS JOIN UNNEST( ARRAY['column_1', 'column_2', 'column_3'], ARRAY[column_1, column_2, column_3] ) AS t(column_name, value);
或者用MAP的方式更简洁:
SELECT entry.key AS column_name, entry.value AS value FROM your_table, UNNEST(MAP( ARRAY['column_1', 'column_2', 'column_3'], ARRAY[column_1, column_2, column_3] )) AS entry;
这两种写法都能将你原表的三列转换为期望的两行列结构。
内容的提问来源于stack exchange,提问作者Smithy
相关产品推荐
相关产品推荐

