使用 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>) 宽表转高表的主要内容,如果未能解决你的问题,请参考以下文章

【数仓】Hive数仓的explode()炸裂函数详解

炸裂函数explode

Hive函数之explode和inline

Hive的表生成函数

Hive行转列(explode/lateral view)

hive函数之~hive当中的lateral view 与 explode