LATERAL VIEW POSEXPLODE ~ Hive/Spark SQL 背景LATERAL VIEW侧视图用来将数组 / Map 等集合字段炸开多行实现一对多关联posexplode()爆炸函数和 explode 类似但同时返回下标位置 元素值LATERAL VIEW posexplode(数组字段) AS pos, val作用把数组拆成多行额外带出每个元素在数组中的索引下标explode vs posexplode 核心区别explode(arr)只输出数组里的元素没有下标explode(array(a,b,c))ASval结果val a b cposexplode(arr)输出两列pos下标从 0 开始、val元素posexplode(array(a,b,c))ASpos,val结果pos val 0 a 1 b 2 cLATERAL VIEW 作用如果直接 select posexplode(col)只能单独查爆炸函数当需要同时查询原表普通字段 炸开后的多行数据必须搭配 LATERAL VIEW标准语法模板SELECT原表普通字段,pos,-- 数组下标val-- 数组元素FROM表名 LATERALVIEWposexplode(数组字段)tmpASpos,val;tmp侧视图别名可省略建议写上pos自定义下标列名val自定义元素列名实战示例id name hobby_list 1 小明 [篮球,游戏] 2 小红 [看书,画画,跑步]SELECTid,name,pos,hobbyFROMuser_info LATERALVIEWposexplode(hobby_list)tASpos,hobby;输出结果id name pos hobby 1 小明 0 篮球 1 小明 1 游戏 2 小红 0 看书 2 小红 1 画画 2 小红 2 跑步常见使用场景需要区分数组元素顺序比如日志数组按时间有序pos 代表第几条行为取数组第 N 个元素做过滤-- 只保留数组第一个元素pos0WHEREpos0有序数组转宽表根据 pos 做行转列 collect_list case when posx有序标签打分下标越小权重越高pos 参与计算。关键特性 坑点下标从 0 开始不是 1数组为 null / [] 空数组整条行会消失不生成任何行想保留空行用LATERALVIEWOUTERposexplode(...);支持嵌套多个 LATERAL VIEW 连续写拆解多层数组Map 类型配套posexplode(map) 会返回 pos, key, value 三列OUTER 关键字补充保留空数据不加 OUTER数组为空则主表这条数据直接丢失加 OUTER数组为空时 posnull, valnull主表数据保留LATERALVIEWOUTERposexplode(hobby_list)tASpos,hobby
💡
读完这篇文章,你可以带走什么

本文来自编程新知一线开发与建站实战沉淀:讲清原理、给出可复现步骤、标注避坑要点。看完后可以直接在你的项目或网站中落地验证。

编
编程新知内容团队
一线开发 · 建站实施 · 持续更新
由资深前端工程师、后端架构师与建站实施人员共同维护,坚持"真实案例 + 完整步骤 + 避坑指南"的内容准则。如果你在落地中遇到问题,欢迎联系我们交流。

想把这套方案用到自己的项目上?

编程新知提供技术答疑与网站建设一站式服务,欢迎联系我们获取针对性建议。

联系工程师
📚

系统学习该技术

进入对应栏目,从基础到进阶完整学习,配套案例与避坑指南。

前往栏目 →
🏗️

需要落地实施

企业建站、SEO 优化、服务器部署等需求,交给工程师一步到位。

了解服务 →
💬

还有疑问

技术难题或方案咨询,联系编程新知获取一对一的专业建议。

联系我们 →