ClickHouse版行转列,列转行PK Hive

– 行转列,列转行
一: 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

  1. 创建表并导入数据
    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》 灾难

  1. Hive版本:
    SELECT movie,category_name
    FROM movie_info
    lateral VIEW
    explode(split(category,",")) movie_info_tmp AS category_name ;

  2. 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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值