Hive explode lateral view 用法

本文介绍了Hive中的explode和lateral view用法,讲解了如何将字段内容转化为行显示。通过举例展示了explode处理array和string类型的场景,强调了explode必须与lateral view配合使用,并提到了map类型的explode注意事项。同时,指出了where条件的正确位置以及explode在特定字符串处理上的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类似于SqlServer的游标,把字段的内容转换成行显示。

lateral view UDTF(expression) tableAliasName as colAliasName

其中UDTF(expression)表示表生成函数说白了就是行转列的函数,即一行变为多行的函数,比如explode,当然也可以通过UDF自定义函数把一行转为多行,或者UDF返回Array,再通过explode炸成多行

tableAliasName表示表的别名,colAliasName表示表的列的别名

原理是:通过lateral view UDTF(expression)函数把一行转换为多行,会生成一个临时表,把这些数据放入这个临时表中,然后使用这个临时表和base表做inner join 使用的条件就是原始表的关系

建表语句:

create table sales_info_new(
sku_id string comment '商品id',
sku_name string comment '商品名称',
state_map map<string,string> comment '商品状态信息',
id_array array<string> comment '商品相关id列表'
)
partitioned by(
dt  string comment '年-月-日'
)
row format delimited
### Hive `LATERAL VIEW` 和 `EXPLODE` 函数详解 #### 语法结构 在Hive查询语句中,`LATERAL VIEW`用于处理复杂的数据类型,如数组或映射。通过与`EXPLODE`函数结合使用,可以将这些复杂类型的元素展开成多行数据。 ```sql SELECT column1, ... , udtf_column_alias FROM source_table LATERAL VIEW EXPLODE(complex_column) exploded_table AS udtf_column_alias; ``` 此语法允许用户指定要爆炸的列以及生成的新表别名和新列别名[^1]。 #### 实际应用案例 考虑有一个名为`src`的表格,其中包含一列表示用户的ID及其关联的兴趣标签组成的数组: | id | tags | |----|------------------------| | 1 | ["music", "sports"] | | 2 | ["travel", "photography"]| 为了获取每一对(id, tag),可执行如下SQL命令来实现这一目标: ```sql SELECT id, value FROM src LATERAL VIEW explode(tags) exploded_tags AS value; ``` 这会返回如下所示的结果集: | id | value | |--| | 1 | music | | 1 | sports | | 2 | travel | | 2 | photography | 当遇到某些记录中的复杂字段为空或NULL的情况时,可以通过添加关键字`OUTER`到`LATERAL VIEW`之后确保即使原表中有空值也能保留原始行而不丢失任何信息。 例如,在上述例子基础上如果希望对于那些tags为空或者不存在的情况下也能够显示对应的id,则应修改查询为: ```sql SELECT id, value FROM src LATERAL VIEW OUTER explode(tags) exploded_tags AS value; ``` 这样就可以得到包括所有源表记录在内的完整结果集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十六画生的博客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值