通过CROSS JOIN
和UNNEST
,将一行中包含的多个逗号分隔的值转换为多行,从而将一行数据转化为多行。
数组结构转多行
将某一列转成数组,然后转成多行,示例如下:
####建库
CREATE DATABASE mydb;
USE mydb;
###建表
CREATE TABLE test(
userid INT
,user_name VARCHAR
,product VARCHAR
) distributed by hash(userid);
###插入两行测试数据
INSERT INTO test VALUES
(1,'aaa','cat,mat,bat'),(2,'bbb','dog,pog,fog');
####查询数据,产品列转行,其中temp_table为临时表名可以更换,col为返回列名
SELECT userid, col
FROM (select userid, split(product,',') as numbers_array from test)
CROSS JOIN UNNEST(numbers_array) as temp_table(col);
###查询结果
userid col
1 cat
1 mat
1 bat
2 dog
2 pog
2 fog
文档内容是否对您有帮助?