Hive Lateral View explode列为空时导致数据异常丢失

news2024/11/26 2:32:55

一、问题描述

日常工作中我们经常会遇到一些非结构化数据,因此常常会将Lateral View 结合explode使用,达到将非结构化数据转化成结构化数据的目的,但是该方法对应explode的内容是有非null限制的,否则就有可能造成数据缺失。
在这里插入图片描述

SELECT name,info
FROM
  (
   SELECT name,
   	      split(info_list,',') as info_arrary
   FROM 
     (
      select '张三' as name,'1,2,3' as info_list
      union all
      select '李四' as name,null as info_list
     ) t1     -- 构造测试数据
   ) t2
LATERAL VIEW explode(t2.info_arrary) a as info ;

查询结果:
在这里插入图片描述

查看结果我们可以发现 ‘李四’ 这条数据数据丢了,这就会造成我们最终统计的数据出现错误。

二、查找原因

通过定位我们可以发现 ‘李四’ 这一行的info字段为null,其split之后的结果自然也是为null,通过LATERAL VIEW explode之后会形成一个为null的view,这样无法关联出数据,该数据就会丢失。

三、解决办法(建议使用方法二)

3.1 方法一

对子查询中的split结果强制使用coalesce()方法,将null替换成一个为[’’]的数组,直接这么写会误以为string字符串。我们可以使用split(’’,’’)构造出一个[’’]数组,改写后的语句如下

SELECT name,info
FROM
  (
   SELECT name,
          coalesce(split(info_list,','),split('','')) as info_arrary
   FROM 
     (
      select '张三' as name,'1,2,3' as info_list
      union all
      select '李四' as name,null as info_list
     ) t1     -- 构造测试数据
   ) t2
LATERAL VIEW OUTER explode(t2.info_arrary) a as info ;

在这里插入图片描述
请注意 ‘李四’ 的结果为空字符,不是null。

3.2 方法二

使用官方提供的LATERAL VIEW OUTER来进行解决,该方法类似于left outer join,即如果explode出来的结果为null,也会保留记录,只不过对应字段为null,改写后的语句如下:

SELECT name,info
FROM
  (
   SELECT name,
          split(info_list,',') as info_arrary
   FROM 
     (
      select '张三' as name,'1,2,3' as info_list
      union all
      select '李四' as name,null as info_list
     ) t1     -- 构造测试数据
   ) t2
LATERAL VIEW OUTER explode(t2.info_arrary) a as info ;

查询结果:
在这里插入图片描述

请注意 ‘李四’ 的结果为null,而不是空字符。

以下是官方文档关于该用法的解释:

The user can specify the optional OUTER keyword to generate rows even when a LATERAL VIEW usually would not generate a row. This happens when the UDTF used does not generate any rows which happens easily with explode when the column to explode is empty. In this case the source row would never appear in the results. OUTER can be used to prevent that and rows will be generated with NULL values in the columns coming from the UDTF.

为了保持代码的稳定性与数据的准确性,建议使用第二种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cocos----刚体

刚体(Rigidbody) 刚体(Rigidbody)是运动学(Kinematic)中的一个概念,指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在 Unity3D 中&#xff…

拼多多百亿补贴商品详情API接口系列

拼多多API接口是拼多多网提供的一种应用程序接口,允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口,开发者可以开发各种应用程序,如店铺管理工具、数据分析工具、购物比价工具等。在本章中,我们将介绍拼多多API接…

pdb restore in ADG database

Effect of PITR on Dataguard Environment (Standby MRP Crashed with ORA-39873) (Doc ID 1591492.1)​编辑To Bottom In this Document Symptoms Cause Solution APPLIES TO: Oracle Database Cloud Exadata Service - Version N/A and later Oracle Database Cloud Servic…

“轻松实现文件复制备份,自动编号轻松管理

在日常工作中,我们经常需要复制文件到另一个文件夹进行备份或整理。然而,手动复制粘贴不仅效率低下,还容易出错。为了解决这个问题,我们推出了一款全新的文件工具——【文件批量改名高手】,让你轻松搞定文件复制备份&a…

生命在于学习——主板跳线的学习

一、前言 好吧,又是一个我之前没接触过的东西,秉持遇到什么就学什么的精神,来学! 我一发小来找我,问我关于跳线的事情,我就一个表情: 好吧,我承认,纵观我23岁&#xf…

拼多多商家私信群发脚本,按键精灵版工具,源码分享

也是用按键精灵写的,实现的功能就是通过图色识别拼多多商品列表然后逐个对商家客服进行私信,私信内容可以在脚本里面提前配置好,代码怎么部署?回答:粘贴到你的按键精灵就行了,因为代码完全开源。 UI界面&a…

⑩① 详解Linux安装 MySQL 8.0【保姆级教程】

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux - MySQL8.0安装 ⑩①【Linux】MySQL8.0安…

谷歌浏览器F12/打开开发者工具网络就无法连接报错

刷新页面就出现提示: 原因:浏览器网络设置的问题,网络设置了离线状态,切换回3G即可。

Vmware虚拟机创建快照、克隆和备份 创建文件夹共享方法

Vmware虚拟机备份 方法一:虚拟机快照备份 虚拟机 快照备份 像是Windows系统里的系统 还原点 功能,它能拍摄一张您虚拟机当前的状态,并将其保存起来,您可以随时通过恢复到快照功能将虚拟机还原到拍摄快照时的状态。 步骤1. 打开…

MIB 6.1810实验Xv6 and Unix utilities(3)pingpong

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题_Isana_Yashiro的博客-CSDN博客 Write a user-level program that uses xv6 system calls to ping-pong a byte between two processes over a pair of pipes, one for each direction. The parent should send a byte to…

centos7中安装Nginx和使用Nginx详细操作

环境: 准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。 一、安装 三台虚拟机都安装下面的步骤执行,安装Nginx,为后面的使用演示使用。 1、安装必备组件: sudo yum install yum-utils2、配置yum源 在下面的文件目录…

高标准农田可视化

高标准农田是指通过土地整治、土壤改良、水利设施、农电配套、机械化作业等措施,提升农田质量和生产能力,达到田块平整、集中连片、设施完善、节水高效、宜机作业、土壤肥沃、生态友好、抗灾能力强、与现代农业生产和经营方式相适应的旱涝保收、稳产高产…

算力崩溃!OpenAI陷入瘫痪,中国黑科技能否拯救全球AI?

大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今技术快速发展的时代,OpenAI的ChatGPT无疑成为了人工智能领域的一颗耀眼明星。但是,随着其用户数量的激增,一个不可忽视的问题逐渐浮出水面——算力短缺。这不仅是OpenAI单独的挑战&…

iddata函数合成的数据中采样间隔时间的两种设置方式及其程序举例

iddata函数生成的数据中采样间隔时间的两种设置方式及其程序举例 在对iddata合成的结构体数据,对采样间隔时间的设置可以通过两种方式实现,本文简要讲解其设置方式。 在设置采样间隔时候,会用到属性“ts”。 (1)对于单次实验,ts…

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序: 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。升序时:它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大&#x…

FL Studio水果软件2025中文破解版注册机

你是否体验过Tomorrowland现场万人蹦迪的的激情?又是否加入过“死墙(Mosh pit:一种Bass音乐节常有的娱乐方式)”的狂欢盛宴?随着时代发展,以电子音乐为代表的数字音乐已然象征着时尚与潮流。在这股风靡全球…

2023年,全球CIO最关注的问题是什么?

面对AI大潮,全球CIO们在焦虑什么?随着全球数字化转型步伐的加速,CIO的角色发生了哪些转变? 继2022年5月发布首份全球CIO报告之后,联想集团今年又发布了以“韧性的全球首席信息官(The Resilient CIO&#xf…

linux环境下软件安装之Mysql8

1、官网下载(右键最后一页的超链接) 2、通过命令行下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz3、解压 1.将.xz解压为.tar xz -d mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz2.将.tar解压为普通文件 tar -xv…

Linux环境下离线安装jdk1.8(内置最新的jdk安装包x64)

一、下载JDK 1.官网下载 官网地址:Java Downloads | Oracle 大多数人的Linux操作系统都是64位的,因此我们就选择64位的压缩包文件,jdk1.8_381是jdk1.8的最新版本。 2.百度网盘下载 链接:https://pan.baidu.com/s/1we_52oylG-el…

Fe-safe 2023 新功能介绍

Fe-safe的功能增强 3DEXPERIENCE中的更新 疲劳耐久性分析界面集成到结构和力学分析App的UX和数据模型当中,支持在同一个App中和同一个仿真对象中定义分析步、相互作用、边界条件、载荷以及耐久性特征。 增强了焊接疲劳功能,在22xGA中集成了Verity的线…