Hive中行转列与列转行

行专列

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字

符串;

CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参为指定分隔符。

CONCAT_WS(separator, array_name):数组以separator为分隔符进行拼接。

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重

汇总,产生 Array 类型字段

COLLECT_LIST(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行

汇总(不去重),产生 Array 类型字段

需求,将同一学院的学生分在一组

1	伍迪	计算机
2	均已	艺术
3	弗莱	计算机
4	班德	计算机
5	莉拉	艺术
6	教授	计算机
7	乌来	艺术
8	狄克	电子

实现效果

 实现语句:

select object,concat_ws("\|",collect_list(name)) 
    from lineToColumn group by object;

列转行

EXPLODE(col):将 hive 一列中复杂的 Array 或者 Map 结构拆分成多行。

SPLIT(STRING s,STRING pattern)

按照正则表达式pattern分割字符串,并将分割后的字符串以字符串数组的方式返回。

使用UDTF的时候,只支持一个字段,这时候就需要LATERAL VIEW出场了.

LATERAL VIEW

用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。侧视图的意义是配合explode(或者其他的UDTF),一个语句生成把单行数据拆解成多行后的数据结果集。

ateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

将上述数据实现如下效果

实现代码:

hive (db_test)> 
              > select names,object 
              > from columnToLine 
              > lateral VIEW explode(split(columnToline.`_c1`,"\\|")) t1 as names;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值