使用 Hive 炸裂函数 explode (map<string,string>) 宽表转高表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Hive 炸裂函数 explode (map<string,string>) 宽表转高表相关的知识,希望对你有一定的参考价值。
参考技术A Hive 炸裂函数 explode(map<string,string>) 宽表转高表SQL:Using the syntax "SELECT udtf(col) AS colAlias..." has a few limitations:
Please see LanguageManual LateralView for an alternative syntax that does not have these limitations.
Also see Writing UDTFs if you want to create a custom UDTF.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF
Hive_列转行(集合/数组转多行)
1.函数说明
EXPLODE(col):
explode(col)接受一个数组(或一个map)作为输入,并将数组元素(map)作为单独的行输出。 UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。
LATERAL VIEW:
用在FROM语句后:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
2.数据准备
movie |
category |
《疑犯追踪》 |
悬疑,动作,科幻,剧情 |
《Lie to me》 |
悬疑,警匪,动作,心理,剧情 |
《战狼2》 |
战争,动作,灾难 |
需求
将电影分类中的数组数据展开。结果如下:
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难
4.创建本地movie.txt,导入数据
[hadoop@hadoop102 datas]$ vi movie.txt
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难
5.创建hive表并导入数据
create table movie_info( movie string, category array<string>) row format delimited fields terminated by " " collection items terminated by ","; load data local inpath "/opt/module/datas/movie.txt" into table movie_info;
6.按需求查询数据
select movie category_temp from movie_info LATERAL VIEW explode(category) emp_temp AS category_temp
以上是关于使用 Hive 炸裂函数 explode (map<string,string>) 宽表转高表的主要内容,如果未能解决你的问题,请参考以下文章