ITPub博客

首页 > 数据库 > 数据库开发技术 > 深入理解Hive中的Lateral View及Lateral View Outer的用法

深入理解Hive中的Lateral View及Lateral View Outer的用法

原创 数据库开发技术 作者:晨曦_001 时间:2023-11-29 08:06:00 0 删除 编辑

今天我想和大家分享一下在Hive中,Lateral View和Lateral View Outer的用法,这两者是在处理数据时经常遇到的操作。那么它们到底是什么呢?我们今天就来一探究竟。

1. Lateral View用法

Lateral View是配合表生成函数(如explode)一起使用,对array或者map类型的列进行展开。Hive的lateral view是用来连接生成的虚拟表的。

例如,我们有一个包含数组的表:

create table array_table(id int, items array<string>);insert into array_table(id,items)values(1, array('apple', 'banana', 'pear')), (2, array('watermelon', 'orange')),(3, array(null));
+-----+----------------------------+| id  |           items            |+-----+----------------------------+| 1   | ["apple","banana","pear"]  || 2   | ["watermelon","orange"]    || 3   | NULL                       |+-----+----------------------------+

如果我们想要把items列展开,可以使用lateral view:

select id, itemfrom array_tablelateral view explode(items) tmp as item;

结果会是:

+-----+-------------+| id  |    item     |+-----+-------------+| 1   | apple       || 1   | banana      || 1   | pear        || 2   | watermelon  || 2   | orange      |+-----+-------------+

如此可以清晰地看到,Lateral View是用于与复杂数据类型交互的强大工具。

2. Lateral View Outer用法

然而,Lateral View有一个限制——如果在explode的列中有空值,那么它会将包含空值的行完全去掉。这时,我们就可以使用Lateral View Outer。

只需要在lateral view后加上outer,它就会保留那些包含空值的行。如果数组为空,那么explode的结果就会是NULL。

我们使用lateral view outer:

select id, itemfrom array_tablelateral view outer explode(items) tmp as item;

结果会是:

+-----+-------------+| id  |    item     |+-----+-------------+| 1   | apple       || 1   | banana      || 1   | pear        || 2   | watermelon  || 2   | orange      || 3   | NULL        |+-----+-------------+

你可看到,id为3的行得以保留,不再被忽视。

希望本文的内容可以帮助你更好地理解Hive中的Lateral View和Lateral View Outer的用法。在Hive中处理复杂数据类型时,这两种方法无疑会是你的强大武器。

社群

为了方便交流和得到大家的反馈,我创建了一个交流群,欢迎大家加入。(社群不卖课,不开星球,只交流)

原文作者:数据仓库技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
公众号:数据仓库技术 数据仓库技术:https://dwsql.com spark内置函数手册: https://sparkfunctions.com

注册时间:2022-12-18

  • 博文量
    116
  • 访问量
    55269