行专列
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;