码迷,mamicode.com
首页 > 编程语言 > 详细

Hive_行转列(多行转一个集合/数组)

时间:2019-11-06 01:06:59      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:null   val   module   pat   跳过   mit   去重   连接   pre   

1.相关函数说明

CONCAT(string A/col, string B/col…):

  返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,...):

  它是一个特殊形式的 CONCAT()。

  第一个参数剩余参数间的分隔符。

  分隔符可以是与剩余参数一样的字符串。

  如果分隔符是 NULL,返回值也将为 NULL。

  这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;

COLLECT_SET(col):

  函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

2. 数据准备

表6-6 数据准备

name

constellation

blood_type

孙悟空

白羊座

A

大海

射手座

A

宋宋

白羊座

B

猪八戒

白羊座

A

凤姐

射手座

A


3. 需求

把星座和血型一样的人归类到一起。结果如下:

射手座,A            大海|凤姐

白羊座,A            孙悟空|猪八戒

白羊座,B            宋宋

4. 创建本地constellation.txt,导入数据

[hadoop@hadoop102 datas]$ vi constellation.txt

孙悟空    白羊座    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/datas/constellation.txt" 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;

 

Hive_行转列(多行转一个集合/数组)

标签:null   val   module   pat   跳过   mit   去重   连接   pre   

原文地址:https://www.cnblogs.com/Tunan-Ki/p/11802628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!