Hive_⾏转列(多⾏转⼀个集合数组)1.相关函数说明
CONCAT(string A/col, string B/col…):
  返回输⼊字符串连接后的结果,⽀持任意个输⼊字符串;
CONCAT_WS(separator, str1, str2,...):
  它是⼀个特殊形式的 CONCAT()。
  第⼀个参数剩余参数间的分隔符。
hive 字符串转数组  分隔符可以是与剩余参数⼀样的字符串。
  如果分隔符是 NULL,返回值也将为 NULL。
  这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间; COLLECT_SET(col):
  函数只接受基本数据类型,它的主要作⽤是将某字段的值进⾏去重汇总,产⽣array类型字段。
2. 数据准备
表6-6 数据准备
name constellation blood_type
孙悟空⽩⽺座A
⼤海射⼿座A
宋宋⽩⽺座B
猪⼋戒⽩⽺座A
凤射⼿座A
3. 需求
把星座和⾎型⼀样的⼈归类到⼀起。结果如下:
射⼿座,A            ⼤海|凤
⽩⽺座,A            孙悟空|猪⼋戒
⽩⽺座,B            宋宋
4. 创建本地,导⼊数据
[hadoop@hadoop102 datas]$
孙悟空⽩⽺座    A
⼤海射⼿座    A
宋宋⽩⽺座    B
猪⼋戒⽩⽺座    A
凤射⼿座    A
5. 创建hive表并导⼊数据
create table person_info(
name string,
constellation string,
blood_type string)
row format delimited fields terminated by "\t";
load data local inpath "/opt/module/" into table person_info;
6. 按需求查询数据
select
t.base
CONCAT_WS("|",COLLECT_SET(t.name)) as name from
(select
name,
concat(constellation,',',blood_type) as base from
person_info;) t
group by
t.base;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。