在正常解析一个有值的字符串时,用lateral view explode是完全ok的,但是,当遇到该字符串为空时,如果在使用该函数,就会导致该条记录消失。这时候需要加个outer lateral view outer explode




转载自https://blog.csdn.net/jarry_cm/article/details/90402833

之前小白有写过一篇文章是高效的解析字符串,里面讲到过一个方法:lateral view explode

最近小白发现,这个函数在使用时,还是有一些坑的,这里小白做一个总结。

在正常解析一个有值的字符串时,用lateral view explode是完全ok的,但是,当遇到该字符串为空时,如果在使用该函数,就会导致该条记录消失。具体场景如下:

sid filterlist
46 NULL

这时,用lateral view explode解析:

select a.sid,b.filtertype --筛选类型,b.filtername --筛选内容,b.filtertitle --筛选子类型,b.filtersubtype --来源:1搜索;2筛选;3url传参,b.filterid --筛选id
from (select sid,filterlistfrom dw_htlbizdb.tmp_hotel_list_bottom01 lateral view explode(split(filterlist,'\\;'))t as flist)a
lateral view json_tuple(flist,'filtername') b asfilternamewhere sid = 49;

结果如下:

sid filtername
无记录

这样的结果就会导致我们漏掉一部分用户的浏览信息,在统计浏览量时数据缺失,结果与实际偏小。

这时,就要用到lateral view outer explode

lateral view explode这个UDTF转换的Array为空的记录,自动被过滤掉了,

如果想要保留记录,需要加上outer关键字。

select a.sid,b.filtertype --筛选类型,b.filtername --筛选内容,b.filtertitle --筛选子类型,b.filtersubtype --来源:1搜索;2筛选;3url传参,b.filterid --筛选id
from (select sid,filterlistfrom dw_htlbizdb.tmp_hotel_list_bottom01 lateral view outer explode(split(filterlist,'\\;'))t as flist)a
lateral view json_tuple(flist,'filtername') b asfilternamewhere sid = 49;

结果为:

sid filtername
46 NULL

这才是最真实的浏览记录。大家在使用时,也要注意哦~

hivesql之lateral view explode遇到记录为空情况相关推荐

  1. Hive Lateral View explode字段值为空时,导致数据异常丢失解决方案

    1.问题描述 日常工作中,我们经常会用Lateral View 结合explode把非结构化数据转化成结构化数据,但是该方法对应explode的内容是有非null限制的,否则就有可能造成数据缺失. 现 ...

  2. Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...

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

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

  4. hive sql之lateral view explode用法

    这篇文章讲的特别好 lateral view explode相当于笛卡尔乘积: 表1的每一行与表二的每一行组合,作为新的一行

  5. hive/mysql使用lateral view explode时会出现的问题(bug)

    hive/mysql使用lateral view explode时会出现的问题 例子 两边计算的区别 问题说明 例子 两边计算的区别 上面两边代码除了右边对disp_detail和clk_detail ...

  6. hive lateral view explode列拆分与行转列用法

    在日常工作中,我们在处理数据时,会遇到某个列存在多个数据的情况,如果想拿到这个列里面每个数据进行后续处理的话,这种情况下有两种处理方式: 第一种:如果这个列多个数据是固定数目,可以使用split切分 ...

  7. Hive Lateral View + explode 详解

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

  8. Hive 连续多次 lateral view explode 踩坑

    table1表结构: c1 c2arr c3arr c4arr select c1, c2arr_item, c3arr_item, c4arr_item from table1 lateral vi ...

  9. LATERAL VIEW explode

    category_name 是给 explode(category) 列起的别名 select movie,category_name from (select movie,category from ...

最新文章

  1. 【MATLAB】数据分析之多项式及其函数
  2. 谈谈 Android MVP 架构 | 掘金技术征文
  3. python3.7安装turtle步骤-Python3.6安装turtle模块
  4. PaddlePaddle文本卷积实现情感分类和微博女友情绪监控AI
  5. XSS(跨站脚本攻击)攻击与防御
  6. 面试官问我:平常如何对你的 Java 程序进行调优?
  7. 三星Galaxy S21 FE现身Geekbench:骁龙888+6GB运存
  8. 计算机大赛软件应用与开发,我院学生在2019年中国大学生计算机设计大赛“软件应用与开发”决赛中荣获佳绩...
  9. ios中amplify配置configure_Asp.netCore3.0 简单的webapi接口 (中)
  10. java string number_Java 学习(6):java Number Math String 数组...常用类型
  11. 【钟表识别】基于matlab GUI形态学钟表识别【含Matlab源码 1351期】
  12. 太强了,头发丝完整保留!一个开源的 Python 实时视频抠图工具
  13. WWDC22 - In App Purchase 更新总结
  14. WinForm中的NotifyIcon控件的使用
  15. QQ自动播放动态视频json卡片怎么换地址
  16. js需要删除页面中某个元素
  17. word段落中插入公式后格式编辑
  18. idcnd传媒官方专业提供
  19. WebSocket 实现聊天功能
  20. 观后感 --《当幸福来敲门》和《赢在中国》

热门文章

  1. android 相机变焦_我的傻瓜相机的“ 8倍”变焦与我的数码单反相机相比如何?...
  2. 为什么“差生”也能出人头地
  3. 使用线性回归预测网店的销售额
  4. 东莞横沥注塑还可分注塑成型模压法和压铸法
  5. 公共DNS服务Public DNS+正式上线
  6. android 6 root boot,震撼首发:一加6T解锁和获取ROOT权限教程
  7. openstack mistral的安装
  8. 小tips;CSS和JS“通信”
  9. matlab对图像聚类,matlab练习程序(meanshift图像聚类)
  10. windows操作系统版本介绍