hive中的lateral view 与 explode函数的使用_guodong2k的博客-CSDN博客_lateral view


本站和网页 https://blog.csdn.net/guodong2k/article/details/79459282 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

hive中的lateral view 与 explode函数的使用_guodong2k的博客-CSDN博客_lateral view
hive中的lateral view 与 explode函数的使用
guodong2k
于 2018-03-06 16:18:24 发布
136637
收藏
323
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guodong2k/article/details/79459282
版权
explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分),
本身已经违背了数据库的设计原理(不论是业务系统还是数据仓库系统),不过大数据技术普及后,很多类似pv,uv的数据,在业务系统中是存贮在非关系型数据库中,
用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身手。
explode作用是处理map结构的字段,使用案例如下(hive自带map,struct,array字段类型,但是需要先定义好泛型,所以在此案例不使用):
建表语句:
drop table explode_lateral_view;
create table explode_lateral_view
(`area` string,
`goods_id` string,
`sale_info` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS textfile;
导入数据:
a:shandong,b:beijing,c:hebei|1,2,3,4,5,6,7,8,9|[{"source":"7fresh","monthSales":4900,"userCount":1900,"score":"9.9"},{"source":"jd","monthSales":2090,"userCount":78981,"score":"9.8"},{"source":"jdmart","monthSales":6987,"userCount":1600,"score":"9.0"}]
表内数据如下
explode的使用:
我们只
拆解array字段,语句为select explode(split(goods_id,',')) as goods_id from explode_lateral_view;
结果如下
拆解map字段,语句为select explode(split(area,',')) as area from explode_lateral_view;
我们会得到如下结果:
拆解json字段
这个时候要配合一下get_json_object我们想获取所有的monthSales,第一步我们先把这个字段拆成list,并且拆成行展示:
select explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{')) as  sale_info from explode_lateral_view;
然后我们想用get_json_object来获取key为monthSales的数据:
select get_json_object(explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{')),'$.monthSales') as  sale_info from explode_lateral_view;
然后挂了FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
UDTF explode不能写在别的函数内
如果你这么写,想查两个字段,select explode(split(area,',')) as area,good_id from explode_lateral_view;
会报错FAILED: SemanticException 1:40 Only a single expression in the SELECT clause is supported with UDTF's. Error encountered near token 'good_id'
使用UDTF的时候,只支持一个字段,这时候就需要LATERAL VIEW出场了
LATERAL VIEW的使用:
侧视图的意义是配合explode(或者其他的UDTF),一个语句生成把单行数据拆解成多行后的数据结果集。
select goods_id2,sale_info from explode_lateral_view LATERAL VIEW explode(split(goods_id,','))goods as goods_id2;
其中LATERAL VIEW explode(split(goods_id,','))goods相当于一个虚拟表,与原表explode_lateral_view笛卡尔积关联。
也可以多重使用
select goods_id2,sale_info,area2
from explode_lateral_view 
LATERAL VIEW explode(split(goods_id,','))goods as goods_id2 
LATERAL VIEW explode(split(area,','))area as area2;
也是三个表笛卡尔积的结果
现在我们解决一下上面的问题,从sale_info字段中找出所有的monthSales并且行展示
select get_json_object(concat('{',sale_info_r,'}'),'$.monthSales') as monthSales from explode_lateral_view 
LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_r;
最终,我们可以通过下面的句子,把这个json格式的一行数据,完全转换成二维表的方式展现
select get_json_object(concat('{',sale_info_1,'}'),'$.source') as source,     get_json_object(concat('{',sale_info_1,'}'),'$.monthSales') as monthSales,     get_json_object(concat('{',sale_info_1,'}'),'$.userCount') as monthSales,     get_json_object(concat('{',sale_info_1,'}'),'$.score') as monthSales  from explode_lateral_view 
LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_1;
guodong2k
关注
关注
87
点赞
323
收藏
打赏
19
评论
hive中的lateral view 与 explode函数的使用
explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分),本身已经违背了数据库的设计原理(不论是业务系统还是数据仓库系统),不过大数据技术普及后,很多类似pv,uv的数据,在业务系统中是存贮在非关系型数据库中,用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,exp...
复制链接
扫一扫
Hive学习之Lateral View
skyWalker_ONLY
09-15
6493
Lateral view与UDTF函数如explode()一起使用,UDTF对每个输入行产生0或者多个输出行。Lateral view首先在基表的每个输入行应用UDTF,然后连接结果输出行与输入行组成拥有指定表别名的虚拟表。Lateralview的语法如下:
LateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlia
[hive]lateral view炸开两层
胖胖的博客
10-13
237
lateral view 用法 炸开两列
评论 19
您还未登录,请先
登录
后发表或查看评论
Hive中的lateral view 、explode、reflect、行转列、列转行、窗口函数与分析函数使用与区别详解
weixin_43230682的博客
08-19
5200
目录
一、使用explode函数将hive表中的Map和Array字段数据进行拆分
二、使用explode函数拆分json字符串数据
三、配合LATERAL VIEW使用
四、列转行
五、行转列
六、reflect函数
七、窗口函数与分析函数
1、创建hive表并加载数据
2、窗口函数
3、OVER从句
4、分析函数
5、增强的聚合Cube和Grouping和Rollup
6、使用cube和ROLLUP根据GROUP BY的维度的所有组合进行聚合。
一、使用explode函...
hive lateral view 与 explode详解
热门推荐
bitcarmanlee的博客
07-16
16万+
1.explodehive wiki对于expolde的解释如下:explode() takes in an array (or a map) as an input and outputs the elements of the array (map) as separate rows. UDTFs can be used in the SELECT expression list and as
hive表生成函数explode、stack、lateral view和json_tuple、parse_url_tuple示例
最新发布
helloxiaozhe的博客
11-08
122
hive表生成函数explode、stack、lateral view和json_tuple、parse_url_tuple示例
Hive行转列拆分JSON案例1
Jamie's Blogs
09-19
1226
需求:现在有一些数据格式如下:
a:shandong,b:beijing,c:hebei|1,2,3,4,5,6,7,8,9|[{"source":"7fresh","monthSales":4900,"userCount":1900,"score":"9.9"},{"source":"jd","monthSales":2090,"userCount":78981,"score":"9.8"},{...
关于lateral view 和 explode 很不错的讲解
weixin_36630761的博客
11-01
1万+
转:http://blog.csdn.net/gamer_gyt/article/details/52169441
1:Array
顾名思义就是数组,使用方式 array
1):创建表
拿电影数据为例,数据的维度包括
创建movie_message表:
[html]
view plain
copy
hive 的 lateral view用法以及注意事项
Zero小猿的博客
05-16
1万+
1. lateral view 简介
  hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。配合UDTF函数使用,一般情况下经常与explode函数搭配,explode的操作对象(列值)是 ARRAY 或者 MAP ,可以通过 split 函数将 String 类型的列值转成 ARRAY 来处理。
【语法格式】
select col_A,col_B,tmp_table.tmp_col
from test_table
HIVE lateral view
valder fields
04-18
497
Lateral View语法
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
描述
lateral view用于和split, explode等UDTF一起使用,它能够将一...
Hive Lateral View + explode 详解
大数据
04-28
5035
hive中的函数分为3类,UDF函数、UDAF函数、UDTF函数
UDF:一进一出
UDAF:聚集函数,多进一出,类似于:count/max/min
UDTF:一进多出,如explore()、posexplode(),UDTF函数的时候只允许一个字段
百度explode()时,经常会出现lateral view + explode相关的文章,很少单独写explode()。分别了解ecplode() 与lateral view的各自作用很重要,不然过程都不知道实现的,换个UDTF函数就不会使用了。
..
Hive SQL中的lateral view explode
数据森麟
03-31
1万+
公众号后台回复“图书“,了解更多号主新书内容
作者:胖里
来源:胖里的日常
标题中直接写lateral view explode是我鲁莽了,毕竟这俩不是法定cp,也并不是不能分开各自生活。...
Hive Lateral View 使用指南
SmartSi
03-17
3万+
1. 语法lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*2. 描述Lateral View一般与用户自定义表生成函数(如explode())结合使用。 如内置表生成函数中所述,UDTF为每
hive的lateral view 与 explode函数的使用&transArray
xuehuagongzi000的博客
11-23
4009
主要介绍explode和posexplode函数的使用。类似于flatmap把一个数组打散
lateral view 侧视图。原表的每一行和explode_lateral_view进行笛卡尔积关联,也可以多重使用
1、数据介绍
先看下我们的数据,主要包括三列,分别是班级、姓名以及成绩,数据表名是default.classinfo。
2、单列Explode
首先来看下最基本的,我们如何把student这一列中的数据由一行变成多行。这里需要使用split和explode,并结合lateral vi
hive中的爆炸函数( lateral view 与 explode详解)
XIAOMO__的博客
11-16
7904
explode就是将hive一行中复杂的array或者map结构拆分成多行。
lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
explode将复杂结构一行拆成多行,然后再用lateral view做各种聚合。
例:
select * from t
LATERAL VIEW 使用总结
半吊子Kyle的博客
11-08
1923
LATERAL VIEW 使用总结使用案例一(单个):split + explode + LATERAL VIEW
The LATERAL VIEW clause is used in conjunction with generator functions such as EXPLODE, which will generate a virtual table containing one or more rows. LATERAL VIEW will apply the rows to each or
HIVE中lateral view 与 explode函数使用
大数据进阶之路
04-27
998
UDTF(User-Defined Table-Generating Functions) 用来解决输入一行输出多行(On-to-many maping) 的需求。Explode也是拆列函数,比如Explode (ARRAY) ,array中的每个元素生成一行。
**explode的使用**
001,allen,usa|china|japan,1|3|6
002,kobe,usa|england|japan,2|3|4
创建表
create table test_message(id int, name
LATERAL VIEW EXPLODE函数详解及应用
Nice的博客
10-31
5044
在进行统计分析的时候有时候会有类似这样的需求 比如求某个平台某一天所有的订单总和,或者淘宝所有pc 端的交易总和,这个时候我们可以基于原本基础的数据进行炸裂处理之后得出结结果值,方便后续进行查询,这种提前进行预聚合的思想长用于即席查询分析的场景中,比如为了适用于某张报表的多条件查询可以采用此种方式结合预聚合的方式进行操作。
Hive SQL中的 lateral view 与 explode(列转行)以及行转列
积一时之步,臻千里之遥程
03-28
6731
文章目录一、列转行Explode炸裂函数posexplode()函数Lateral View例子1例子2例子3例子4——多列炸裂 Posexplode例子5二、行转列例子1例子2
一、列转行
行转列:将多个列中的数据在一列中输出
列转行:将某列一行中的数据拆分成多行
Explode炸裂函数
将hive某列一行中复杂的 array 或 map 结构拆分成多行(只能输入array或map)
语法
explode(col)
select explode(arraycol) as newcol from tabl
hive lateral view语句
Cody的笔记本
01-12
2万+
原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView#
lateral view用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
一个简单的例子,假设我们有一张表pageAds,它有两列数据,第一列是pagei
C和指针之反转字符串
码莎拉蒂
10-29
1215
1、问题
把参数字符串中字符反向排序,请使用指针而不是数组下标,不要使用任何C函数库中
2、实现
#include
#include
/**
*函数把参数字符串中字符反向排序,请使用指针而不是数组下标,不要使用任何C函数库中
*用于操作字符串的函数.
*/
void reverse_string(char *string)
if (string ==
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:编程工作室
设计师:CSDN官方博客
返回首页
guodong2k
CSDN认证博客专家
CSDN认证企业博客
码龄14年
暂无认证
原创
32万+
周排名
148万+
总排名
14万+
访问
等级
322
积分
19
粉丝
87
获赞
20
评论
328
收藏
私信
关注
热门文章
hive中的lateral view 与 explode函数的使用
136630
569. Median Employee Salary
1930
601. Human Traffic of Stadium
831
627. Swap Salary
385
596. Classes More Than 5 Students
322
最新评论
hive中的lateral view 与 explode函数的使用
给我打毛衣:
不错不错
hive中的lateral view 与 explode函数的使用
Doooooing:
hive中的lateral view 与 explode函数的使用
liuquanli4051:
那就别写。写个垃圾干啥
hive中的lateral view 与 explode函数的使用
米西米西咪西
回复
kill_99: 其实这里的笛卡尔积指的是,原表中的每一条数据 与 LATERAL VIEW explode中相应这条数据的那个字段展开的若干条记录 做笛卡尔积;而不能理解成 与 侧视表中的所有记录做笛卡尔积。
hive中的lateral view 与 explode函数的使用
eiyouwangding
回复
greatcoti: 把大佬这篇博客中用到的方法整理了一下,需要的话可以看一下 https://blog.csdn.net/m0_47608964/article/details/108000182
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
626. Exchange Seats
601. Human Traffic of Stadium
596. Classes More Than 5 Students
2018年1篇
2017年6篇
目录
目录
最新文章
626. Exchange Seats
601. Human Traffic of Stadium
596. Classes More Than 5 Students
2018年1篇
2017年6篇
目录
评论 19
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
guodong2k
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值