工作中看代码时遇到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相关推荐

  1. over 与lateral view 的hive、spark sql执行计划

    建表语句 create table test_over (user_id string,login_date string ) COMMENT '测试函数使用,可以删除' row format del ...

  2. hive中的lateral view的解析

    hive中的lateral view的解析 用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身 ...

  3. Hive列转行 (Lateral View + explode)详解

    需求: <疑犯> 悬疑,动作,科幻,爱情 <lies> 悬疑,警匪,动作,心理,剧情 <战狼> 战争,动作,灾难转成如下格式:<疑犯> 悬疑 <疑 ...

  4. Hive Lateral View + explode 详解

    hive中的函数分为3类,UDF函数.UDAF函数.UDTF函数 UDF:一进一出 UDAF:聚集函数,多进一出,类似于:count/max/min UDTF:一进多出,如explore().pose ...

  5. hive中的lateral view 与 explode函数的使用

    explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分), 本身已经违背了数据库的设计原理(不论是业务系统还是数据 ...

  6. hive explode函数入门及其与lateral view的结合

    简单用法 举个例子 select collect_list(name) from t_order; 结果 +---------------------------------------------- ...

  7. mysql explode函数_hive中,lateral view 与 explode函数

    hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析. exp ...

  8. hive 的 lateral view用法以及注意事项

    1. lateral view 简介   hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表.配合UDTF函数 ...

  9. [1179]hive的lateral view用法

    文章目录 1. lateral view 简介 2. 实操 2.1 建表(hive) 2.2 插入数据 2.3 转成多行 2.4 汇总求和 1. lateral view 简介 hive函数 late ...

最新文章

  1. Gartner 2019 年供应链技术八大趋势:AI、高级分析、物联网、RPA、自主设备、数字孪生...
  2. 50、mysql基于mysql-proxy读写分离实战
  3. Win64 驱动内核编程-10.突破WIN7的PatchGuard
  4. 《Swift开发实战》——第16章,第16.2节下标脚本用法
  5. 离散余弦变换和C语言实现-win32版本
  6. 30天了解30种技术系列---(1)现代web应用服务器-Express.js
  7. 探讨.NET Core数据进行3DES加密和解密问题
  8. JVM 调优实战--什么是调优及如何调优的思路
  9. iOS开发UI篇—直接使用UITableView Controller
  10. GO实例3 Slice append打印
  11. Android 在button 上添加imageview不显示
  12. BZOJ2160 拉拉队排练【Manacher】
  13. 在浏览器输入URL会发生什么?
  14. 【JavaWeb】在office word中使用merge field出现空行问题
  15. 小学校计算机教室年度工作总结,小学计算机教师年度工作总结
  16. asp.net MVC使用treegrid——jqwidgets插件
  17. app 原形设计常用工具总结
  18. 上海亚商投顾:沪指低开高走 锂矿股午后大涨
  19. Autoware.universe 和 carla simulator 联合仿真
  20. 如何应对 DDoS 勒索攻击?

热门文章

  1. Echarts 封装常用图表组件
  2. 转:侯宏:企业数字化转型的关键不是技术,而是战略
  3. C++ 处理HBITMAP类型的.bmp位图文件, 代码工具
  4. npm警告:WARN config init.module Use `--init-module` instead.
  5. java命名规则与命名规范
  6. @MapperScan的作用
  7. java实现三天免登陆_[内附完整源码和文档] 基于Java的人事档案管理系统
  8. Qt工作笔记(常用代码段)
  9. Halcon学习笔记(五)几何定位+仿射+车牌识别
  10. Matlab统计参数