在日常的业务场景中,我们经常会涉及到向某张表里面保存array类型的字段,例如:
然后在业务中我们可能需要的是列转行的方式,也就是说把id为2的用户根据classid进行拆分成两行,最后期望得到的结果是:
在clickhouse里面,如果想要达到这样的结果,name就需要使用这里的Array Join语法。他的语法是:
select xxx from xxx ARRAY JOIN ${列字段数组}
下面我们来演示一下:
1)创建一张数组类型的表:
CREATE TABLE teachers ( `id` UInt8, `name` String, `classid` Array(UInt8) ) ENGINE = MergeTree() ORDER BY id;
2)向当前表插入2条数据:
insert into table teachers values(1,'张三',[1,2]); insert into table teachers values(2,'李四',[2,3]);
3)查询teachers表的数据:
select * from teachers;
4)列转行转换
select * from teachers ARRAY JOIN classid;
如下图:
这里就实现了在clickhouse中列转行的效果。
备注:
1、这里使用array join的话,他会排除空数组的内容,也就是只显示数组字段有值的行。 2、如果不想让他排空数组的话,可以使用left array join
还没有评论,来说两句吧...