DuckDB如何展开含不同键的map实现unpivot?
DuckDB中Map类型列的Unpivot实现
你可以通过entries()函数结合unnest()来实现Map类型列的Unpivot操作,这两个是DuckDB处理Map类型的核心工具:
先给出示例表的初始化语句(如果你的表已存在可跳过):
CREATE TABLE sales_data ( Product VARCHAR, Sales MAP(VARCHAR, INT) ); INSERT INTO sales_data VALUES ('Widget', map(['Jan', 'Feb'], [12, 13])), ('Dongle', map(['Feb', 'Apr'], [1, 22]));
执行以下查询即可得到你想要的结果:
SELECT Product, entry.key AS Month, entry.value AS Qty FROM sales_data, unnest(entries(Sales)) AS entry;
简单说明
entries(Sales):把Map类型的Sales列转换成包含key和value字段的结构体数组,比如{Jan=12, Feb=13}会变成[{key='Jan', value=12}, {key='Feb', value=13}]unnest(...):将这个结构体数组拆分为多行,每行对应一个键值对,完成Unpivot转换
内容的提问来源于stack exchange,提问作者Jefferey Cave
相关产品推荐
相关产品推荐

