6. Hive中的 explode / posexplode 和 lateral view

这篇具有很好参考价值的文章主要介绍了6. Hive中的 explode / posexplode 和 lateral view。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hive中的 explode / posexplode 和 lateral view

1. explode()

将 arrary 或 map 结构数据拆分成多行,并返回拆分后的每个元素。

1.1 用于 array 的语法如下
select explode(arraycol) as newcol from tablename;
  • explode ():函数中的参数传入的是 arrary 数据类型的列名
  • newcol:给转换后的列起一个新的名字,用于代表转换之后默认的列名
  • tablename:原表名
-- data表 源数据

id   |   names
---------------
1    |   ["Alice", "Bob"]
2    |   ["Charlie", "Dave", "Eve"]

-- 使用explode函数拆分names列

SELECT explode(names) AS name
FROM data;

-- 输出结果

name
--------
Alice
Bob
Charlie
Dave
Eve
1.2 用于 map 的语法如下
select explode(mapcol) as (keyname,valuename) from tablename;
  • explode ():函数中的参数传入的是 map 数据类型的列名
  • 由于 map 是 kay-value 结构,所以在转换的时候会转换成两列,一列是 key 转换而成的,一列是 value 转换而成的
  • keyname:表示 key 转换成的列名称,用于代表 key 转换之后默认的列名
  • valuename:表示 value 转换成的列名称,用于代表 value 转换之后默认的列名

注意:这两个值需要在 as 之后用括号括起来然后以逗号分隔。

-- 源数据

id   |   info
---------------
1    |   {"name":"Alice", "age":25}
2    |   {"name":"Bob", "age":30, "gender":"Male"}

-- 使用explode(map)函数拆分info列

select explode(info) as (kkk, vvv)
from data;

-- 输出结果

   kkk     |   vvv
--------------------
   name    |   Alice
   age     |   25
   name    |   Bob
   age     |   30
   gender  |   Male
1.3 explode() 函数存在的局限性
  • 不能关联原有的表中的其他字段
  • 不能与 group by、cluster by、distribute by、sort by 联用
  • 不能进行 UDTF 嵌套
  • 不允许选择其他表达式(不要理解)
2. posexplode()

将 arrary 数据(不能用于map数据)拆分成多行,并返回拆分后的 行索引对应的 arrary 元素

用于 array 的语法如下
select posexplode(arraycol) as newcol from tablename;
  • posexplode ():函数中的参数传入的是 arrary 数据类型的列名
  • newcol:给转换后的列起一个新的名字,用于代表转换之后默认的列名
  • tablename:原表名
-- data表 源数据

id   |   names
---------------
1    |   ["Alice", "Bob"]
2    |   ["Charlie", "Dave", "Eve"]

-- 使用posexplode函数拆分names列

SELECT posexplode(names) AS (pos, name)
FROM data;

-- 输出结果

  pos   |   name
----------------
  0     |   Alice
  1     |   Bob
  0     |   Charlie
  1     |   Dave
  2     |   Eve
3. lateral view

lateral view 是 Hive 中提供给 UDTF 函数使用的,它可以解决使用 UDTF 后不能添加额外 select 列的问题。

lateral view 会将 UDTF 生成的结果放到一个虚拟表中,然后这个虚拟表会和 输入行 进行 join 来达到关联 UDTF 外的 select 字段的目的。

-- 语法

lateral view udtf(expression) tableAlias as columnAlias (,columnAlias)*
  • tableAlias:表示 UDTF 函数转换的虚拟表的名称
  • columnAlias:表示虚拟表的虚拟字段名称,如果分裂之后有一个列,则写一个即可;如果分裂之后有多个列,按照列的顺序声明所有虚拟列名,以逗号隔开。
3.1 用于 explode(array)
-- data表 源数据

id   |   names
---------------
1    |   ["Alice", "Bob"]
2    |   ["Charlie", "Dave", "Eve"]

-- 使用explode函数拆分names列,并查询出 id列

SELECT id, name
FROM data
lateral view explode(names) tmp as name;

-- 输出结果

id   |   name
--------------
1    |   Alice
1    |   Bob
2    |   Charlie
2    |   Dave
2    |   Eve
3.2 用于 explode(map)
-- data表 源数据

id   |   info
---------------
1    |   {"name":"Alice", "age":25}
2    |   {"name":"Bob", "age":30, "gender":"Male"}

-- 使用explode(map)函数拆分info列,并查询出 id列

SELECT id, key, value
FROM data
LATERAL VIEW explode(info) tmp AS key, value;

-- 输出结果

id   |   key     |   value
--------------------------
1    |   name    |   Alice
1    |   age     |   25
2    |   name    |   Bob
2    |   age     |   30
2    |   gender  |   Male
3.3 用于 posexplode(array)
-- data表 源数据

id   |   names
---------------
1    |   ["Alice", "Bob"]
2    |   ["Charlie", "Dave", "Eve"]

-- 使用posexplode函数拆分names列

SELECT id, pos, name
FROM data
LATERAL VIEW posexplode(names) tmp AS pos, name;

-- 输出结果

id  |  pos   |   name
----------------------
1   |   0    |   Alice
1   |   1    |   Bob
2   |   0    |   Charlie
2   |   1    |   Dave
2   |   2    |   Eve
学习链接

Hive 应用:explode 和 lateral view文章来源地址https://www.toymoban.com/news/detail-543184.html

到了这里,关于6. Hive中的 explode / posexplode 和 lateral view的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive Lateral View + explode 详解

    hive中的函数分为3类,UDF函数、UDAF函数、UDTF函数 UDF:一进一出 UDAF:聚集函数,多进一出,类似于:count/max/min UDTF:一进多出,如explore()、posexplode(),UDTF函数的时候只允许一个字段 百度explode()时,经常会出现lateral view + explode相关的文章,很少单独写explode()。 分别 了解 ecplode() 与

    2023年04月11日
    浏览(26)
  • HIVE SQL通过Lateral View + explode实现列转行

    原表: a b Andy 碟中谍,谍影重重,007 MOMO 小鞋子,朋友啊你的家在哪里 David ‘’ Lily NULL 实现效果 a b Andy 碟中谍 Andy 谍影重重 Andy 007 MOMO 小鞋子 MOMO 朋友啊你的家在哪里 David ‘’ 实现代码: 注: explode函数:处理map结构的字段,将数组转换成多行,所以此处使用了split函数将

    2024年02月12日
    浏览(29)
  • explode与lateral view使用详解(spark及hive环境对比)

    定义: explode函数能够将array及map类型的数据炸开,实现一行变多行 格式: select explode(array/map) from table 示例 原始数据tmp表 name id goods a 1 book_a,food_a b 2 book_b,food_b c 3 null  输出结果 goods_col book_a food_a book_b food_b 定义: Lateral 也是用来对数组进行列转行的,Lateral View主要解决在

    2024年02月03日
    浏览(25)
  • 大数据Hive篇:explode 和 posexplode

    一. explode单独使用。 1.1. 用于array类型的数据 table_name 表名 array_col 为数组类型的字段 new_col array_col被explode之后对应的列 1.2. 用于map类型的数据 由于map是kay-value结构的,所以它在转换的时候会转换成两列,一列是kay转换而成的,一列是value转换而成的。 table_name 表名 map_col 为

    2024年02月13日
    浏览(26)
  • hive lateral view 实践记录(Array和Map数据类型)

    目录 一、Array 1.建表并插入数据  2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 正确插入数据: 原数据 结果:  --------最开始错误的插入数据法-------  原数据  step1: step2: 备注: 比原表数据少了 双引号 综上,以上的插入数据是不对的!!

    2024年02月11日
    浏览(30)
  • HiveSQL题——炸裂函数(explode/posexplode)

    目录 一、炸裂函数的知识点 1.1 炸裂函数  explode  posexplode 1.2 lateral view 侧写视图 二、实际案例 2.1 每个学生及其成绩 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 日期交叉问题 0 问题描述 1 数据准备 2 数据分析 3 小结 2.3 用户消费金额 0 问题描述 1 数据准备 2 数据分析 3 小

    2024年03月15日
    浏览(30)
  • Hive SQL——explode拆分函数&多行(列)合并为一行(列)&reflect函数

    cd /data/import/ sudo vi test_explode_map_array.txt 添加以下文件内容 小明    产品1,产品2,产品3    性别:男,年龄:24 小花    产品4,产品5,产品6    性别:女,年龄:22  map_key map_value 年龄 24 性别 男 年龄 22 性别 女 prod_arr_new 产品1 产品2 产品3 产品4 产品5 产品6 name prod_arr_new 小明 产品1

    2024年02月15日
    浏览(42)
  • MySQL实现数据炸裂拆分(类似Hive的explode函数的拆分数组功能)

    背景描述 ​ 在Hive中,\\\"explode\\\"函数用于将数组类型的列拆分为多行,以便对数组中的每个元素进行处理。然而,在MySQL中,并没有直接的类似功能。但是,我们可以使用一些技巧来模拟这个功能,实现在MySQL中拆分数组并进行查询的操作。本文将介绍如何在MySQL中实现类似Hiv

    2024年02月11日
    浏览(32)
  • Hive(12):View视图

    1 View的概念 Hive中的视图(view)是一种虚拟表,只保存定义,不实际存储数据。通常从真实的物理表查询中创建生成视图,也可以从已经存在的视图上创建新视图。 创建视图时,将冻结视图的架构,如果删除或更改基础表,则视图将失败,并且视图不能存储数据,操作数据,

    2024年02月12日
    浏览(39)
  • 解决Hive视图View数据乱码的问题

    在Hive中,基于某个表创建视图,直接引用表的字段是不会有问题的;但如果增加一个不存在表中的字段,且字段值为中文,就会出现乱码的问题。         在网上找了一圈,原因是Hive的元数据库默认编码是 Latin1(ISO-8859-1),解决方案基本都是去Hive元数据库修改编码。

    2024年02月17日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包