ClickHouse版行转列,列转行PK Hive

  • Post author:
  • Post category:其他


– 行转列,列转行

一: 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



版权声明:本文为start_hadoop原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。