当前位置: 首页 > article >正文

Hive:explode 和 lateral view

explodelateral view 是 Apache Hive 中常用的两个概念,它们通常一起使用来处理数组或映射类型的数据。

hive:explode和lateral view函数实现行转列_hive explode行转列 带字段名-CSDN博客

9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解-CSDN博客

explode 函数

explode 是一个内置的表生成函数(UDTF),它用于将数组或映射中的每个元素拆分成独立的行。具体来说,explode 函数会将一个数组或映射转换成多行,每行包含一个元素。

示例表结构

假设有一个表 src,其中有一列 array_column 存储着数组类型的数据:

create table src (
  id int,
  array_column array<string>
);
插入一些示例数据
insert into src values (1, array('apple', 'banana')), (2, array('orange'));
使用 explode 函数
select id, value
from src
lateral view explode(array_column) exploded_table as value;

在这个查询中:

  • LATERAL VIEW explode(array_column) exploded_table AS value 这部分指定了要对 array_column 列应用 explode 函数,并且将生成的列命名为 value
  • 对于 src 表中的每一行,explode 函数会将 array_column 中的每个元素拆分成独立的行。
查询结果

假设 src 表中的数据如上所述插入,那么上述查询的结果将是:

idvalue
1apple
1banana
2orange

lateral view  explode

lateral view 是一个特殊的语法,用于将 UDTF(如 explode)的结果与原始表中的每一行进行关联。这意味着,对于原始表中的每一行,UDTF 都会被调用一次,并且其产生的每一行都会与原始行的数据组合起来

基本用法

lateral view 通常与 explode 一起使用,以实现数组或映射的拆分。它的语法如下:

select ...
from table
lateral view udtf_function(column) alias as column1, column2, ...
  • table:原始表。
  • udtf_function(column):UDTF 函数及其参数。
  • alias:UDTF 函数生成的临时表的别名。
  • column1, column2, ...:UDTF 函数生成的列的名称。
示例

继续上面的例子,我们使用 lateral viewexplode 来拆分数组:

select id, value
from src
lateral view explode(array_column) exploded_table as value;

lateral view outer explode

有时候,数组或映射可能是空的或包含 NULL 值,这时 explode 函数不会生成任何行,导致原始表中的某些行在结果集中丢失。为了防止这种情况发生,可以使用 lateral view outer 关键字。

示例

假设在 src 表中添加一行,其中 array_column 是空数组:

insert into src values (3, array());

如果不使用 outer 关键字,查询结果将不会包含 id 为 3 的行:

select id, value
from src
lateral view explode(array_column) exploded_table as value;

结果:

idvalue
1apple
1banana
2orange

为了确保 id 为 3 的行也出现在结果集中,可以使用 outer 关键字

select id, value
from src
lateral view outer explode(array_column) exploded_table as value;

结果:

idvalue
1apple
1banana
2orange
3NULL

总结

  • explode 函数:用于将数组或映射中的每个元素拆分成独立的行
  • lateral view 关键字:用于将 UDTF 的结果与原始表中的每一行进行关联
  • lateral view outer 关键字:用于确保即使 UDTF 没有生成任何行,原始表中的行也会保留在结果集中,只是 UDTF 生成的列会包含 NULL 值。

http://www.kler.cn/a/385022.html

相关文章:

  • Mysql、Dm8达梦数据库通过脚本导出指定库所有表的结构详情信息到
  • Go 项目中实现类似 Java Shiro 的权限控制中间件?
  • 信号-2-信号捕捉
  • Docker基本概念汇总(更全面了解Docker)
  • Swift 开发教程系列 - 第9章:错误处理
  • UE5.4 PCG 自定义PCG蓝图节点
  • 算法通关(3) -- kmp算法
  • leetcode155:最小栈
  • Java中怎样将bytes转换为long类型?
  • blender中,渲染是指渲染图片or视频 ,还是模型?
  • 前端开发实现自定义勾选/自定义样式,可复选,可取消勾选
  • Maven的安装配置
  • Docker与Cgroups资源控制实战
  • 如何通过网络加速器提升TikTok创作与观看体验
  • ORACLE _11G_R2_ASM 常用命令
  • 设置域名跨越访问
  • 第J5周:DenseNet+SE-Net实战
  • DNS服务器
  • 使用QtWebEngine的Mac应用如何发布App Store
  • PHP实现全站静态化
  • C++学习笔记----10、模块、头文件及各种主题(四)---- 头文件
  • 论文阅读《Structure-from-Motion Revisited》
  • Excel 无法打开文件
  • 【计网】实现reactor反应堆模型 --- 框架搭建
  • 【论文复现】基于深度学习的手势识别算法
  • 【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】