explode与lateral view解析 hive
工作中看代码时遇到lateral view explode(split(sni_type,',')) snTable as sni_info ,初看挺一脸懵逼的,细查之后才明白是对字段sni_type进行分割之后,将分割后中的元素值转换为了多行。具体:
split()函数
split()函数用于分割数据。语法格式为split(str,sep) ,参数str为字符串类型的字段,sep为分割符(支持正则),结果返回一个数组array。如上面split(sni_type,',') ,假设字段sni_type的值为“7,17,20,8”,则上述以逗号分割,得到数组['7','17','20','8']。
注意:对于 “.”,"|“这样的特殊字符,不加”\“的时候是特殊字符,加了以后才是普通字符,而对于”\d"的字符,需要加"\“后才是特殊字符,就是是说”\\d"才是匹配数字。
explode 函数
用于将一行转换为多行。维基百科的解释是“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 a part of LATERAL VIEW.”即将一个为array或者map的字段中的元素分开成为独立的行。
-- 假设sni_type的值为 "25,36,100"
select explode(split(sni_type,",")) as partSni
from ods_up_content_source
where sni_type is not NULL and dt='20210104' and size(split(sni_type,","))>3
limit 10;--其中的一个返回结果为
25
36
100
lateral view 函数
lateral view 用于将用户生成的数据表进行连接。wiki的解释为:”Lateral view is used in conjunction with user-defined table generating functions such as explode(). As mentioned in Built-in Table-Generating Functions, a UDTF generates zero or more output rows for each input row. A lateral view first applies the UDTF to each row of base table and then joins resulting output rows to the input rows to form a virtual table having the supplied table alias“
初看上去有点不好理解,先看个报错的示例:
即如果直接select只能选择单列,不能选择多个字段。而此时,lateral view就派上用场了,可将多个字段进行连接。
select sni_type,sni_info
from ods_up_content_source
lateral view explode(split(sni_type,',')) snTable as sni_info
where sni_type is not NULL and dt='20210104' and size(split(sni_type,","))>3
limit 10;
结果显示:
实际处理中,select选择的其他的字段的数据会复制。可以看出如果原来是m行个sni_type,每个sni_type都是含n个元素,则新得到的有m*n行。
综上: lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
鸣谢与参考:
https://blog.csdn.net/yahahassr/article/details/97911676
https://blog.csdn.net/bitcarmanlee/article/details/51926530
https://blog.csdn.net/wangwangstone/article/details/112687431
explode与lateral view解析 hive相关推荐
- over 与lateral view 的hive、spark sql执行计划
建表语句 create table test_over (user_id string,login_date string ) COMMENT '测试函数使用,可以删除' row format del ...
- hive中的lateral view的解析
hive中的lateral view的解析 用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身 ...
- Hive列转行 (Lateral View + explode)详解
需求: <疑犯> 悬疑,动作,科幻,爱情 <lies> 悬疑,警匪,动作,心理,剧情 <战狼> 战争,动作,灾难转成如下格式:<疑犯> 悬疑 <疑 ...
- Hive Lateral View + explode 详解
hive中的函数分为3类,UDF函数.UDAF函数.UDTF函数 UDF:一进一出 UDAF:聚集函数,多进一出,类似于:count/max/min UDTF:一进多出,如explore().pose ...
- hive中的lateral view 与 explode函数的使用
explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分), 本身已经违背了数据库的设计原理(不论是业务系统还是数据 ...
- hive explode函数入门及其与lateral view的结合
简单用法 举个例子 select collect_list(name) from t_order; 结果 +---------------------------------------------- ...
- mysql explode函数_hive中,lateral view 与 explode函数
hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析. exp ...
- hive 的 lateral view用法以及注意事项
1. lateral view 简介 hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表.配合UDTF函数 ...
- [1179]hive的lateral view用法
文章目录 1. lateral view 简介 2. 实操 2.1 建表(hive) 2.2 插入数据 2.3 转成多行 2.4 汇总求和 1. lateral view 简介 hive函数 late ...
最新文章
- Gartner 2019 年供应链技术八大趋势:AI、高级分析、物联网、RPA、自主设备、数字孪生...
- 50、mysql基于mysql-proxy读写分离实战
- Win64 驱动内核编程-10.突破WIN7的PatchGuard
- 《Swift开发实战》——第16章,第16.2节下标脚本用法
- 离散余弦变换和C语言实现-win32版本
- 30天了解30种技术系列---(1)现代web应用服务器-Express.js
- 探讨.NET Core数据进行3DES加密和解密问题
- JVM 调优实战--什么是调优及如何调优的思路
- iOS开发UI篇—直接使用UITableView Controller
- GO实例3 Slice append打印
- Android 在button 上添加imageview不显示
- BZOJ2160 拉拉队排练【Manacher】
- 在浏览器输入URL会发生什么?
- 【JavaWeb】在office word中使用merge field出现空行问题
- 小学校计算机教室年度工作总结,小学计算机教师年度工作总结
- asp.net MVC使用treegrid——jqwidgets插件
- app 原形设计常用工具总结
- 上海亚商投顾:沪指低开高走 锂矿股午后大涨
- Autoware.universe 和 carla simulator 联合仿真
- 如何应对 DDoS 勒索攻击?
热门文章
- Echarts 封装常用图表组件
- 转:侯宏:企业数字化转型的关键不是技术,而是战略
- C++ 处理HBITMAP类型的.bmp位图文件, 代码工具
- npm警告:WARN config init.module Use `--init-module` instead.
- java命名规则与命名规范
- @MapperScan的作用
- java实现三天免登陆_[内附完整源码和文档] 基于Java的人事档案管理系统
- Qt工作笔记(常用代码段)
- Halcon学习笔记(五)几何定位+仿射+车牌识别
- Matlab统计参数