目录
2、Hive表行转列,列转行以及Hive Lateral View在列转行中的使用
一、Hive Lateral View
1、基本介绍
Lateral View用于和UDTF函数(explode、split)结合来使用。 首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题。
语法:
LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)
2、Hive表行转列,列转行以及Hive Lateral View在列转行中的使用
- 表1:cityInfo
cityname |
regionname |
上海 |
四川北路 |
上海 |
虹梅路 |
上海 |
音乐学院 |
上海 |
徐家汇 |
上海 |
陆家嘴 |
上海 |
古北 |
北京 |
东四 |
北京 |
复兴门 |
北京 |
新街口 |
北京 |
地安门 |
- 表2:cityInfoSet
cityname |
regionname |
上海 |
四川北路,虹梅路,音乐学院,徐家汇,陆家嘴,古北 |
北京 |
地安门,复兴门,东四,新街口 |
表1和表2的结构如上所示。
现在需要在 hive 中使用 Hql 语句对表1和表2进行互相转化。
(1)行转列
使用的函数说明:
concat_ws(string SEP,string array<String>):函数返回字符串连接后的结果,SEP表示各个字符串连接的分割符;
collect_set(col): 函数将col字段进行去重,并合并成一个数组。
表1=>表2 可以使用 hive 的内置函数 concat_ws() 和 collect_set()进行转换,执行hql如下所示:
select cityname,concat_ws(',',collect_set(regionname)) as address_set from cityInfo group by cityname;
(2)列转行
使用到的函数
函数split(String str,String pat) 将字符串按照pat分割;
函数explode(array) 将数组中的元素拆分为多行显示。
表2=>表1 可以使用 hive 的内置函数 l