– 行转列,列转行
一: hive版本
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
苍老师 白羊座 B
结果如下:
射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋|苍老师
SELECT t1.c_b , CONCAT_WS("|",collect_set(t1.name))
FROM (
SELECT NAME ,CONCAT_WS(’,’,constellation,blood_type) c_b
FROM person_info
)t1
GROUP BY t1.c_b
二: ClickHouse版本
arrayStringConcat
- 创建表并导入数据
create table xx (
name String,
xz String,
xx String
) engine = Log;
clickhouse-client -q ‘insert into xx FORMAT TSV’ < /data/xx.txt
SELECT
xxxz,
groupArray(name)
FROM
(SELECT
name,
concat(xz,’,’,xx) as xxxz
FROM
xx)
GROUP BY xxxz;
3.
SELECT
xxxz,
arrayStringConcat(groupArray(name),’|’) as concat_col
FROM
(SELECT
name,
concat(xz,’,’,xx) as xxxz
FROM
xx)
GROUP BY xxxz;
三:列转行
movie category
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难
得到结果如下:
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难
-
Hive版本:
SELECT movie,category_name
FROM movie_info
lateral VIEW
explode(split(category,",")) movie_info_tmp AS category_name ; -
ClickHouse版本:
create table movie (
name String,
types String
) engine=Log;
clickhouse-client -q ‘insert into movie FORMAT TSV’ < /data/movie.txt
SELECT
name,
ty
FROM
(
SELECT
name,
splitByChar(’,’,types) as tys
FROM
movie
)
array join
tys as ty;
lateral view explode ------->array join
collect_set ------->groupArray
concat
concat_ws('|',arr) ------->arrayStringConcat
splitByChar
splitByString