通过CROSS JOINUNNEST,将一行中包含的多个逗号分隔的值转换为多行,从而将一行数据转化为多行。

数组结构转多行

将某一列转成数组,然后转成多行,示例如下:

####建库
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