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

Posted tunan96

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive_行转列(多行转一个集合/数组)相关的知识,希望对你有一定的参考价值。

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_行转列(多行转一个集合/数组)的主要内容,如果未能解决你的问题,请参考以下文章

Hive sql 行转列列转行全网最清楚

Hive 行转列 & 列转行

SQL Server 行转列,列转行。多行转成一列

Hive 行转列和列转行

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

利用FOR XML PATH行转列(根据某字段分组,多行数据转成一行,并用逗号隔开)