如何截取Hive数组中的前N个元素?

文章目录

1、需求描述

需求:截取任意给定数组中的前N个元素,返回截取后的子数组

假设我们有如下三种类型的Hive数组:

sql 复制代码
select array(1,2,3,4)            -- [1,2,3,4]
select array(1,2,3,NULL)         -- [1,2,3,null]
select split('123', space(0))    -- [1,2,3,]

现在,我们要截取上述数组中的前三个元素,那么应该怎么操作呢?

可以尝试以下几种方案

2、使用索引

方式1:使用索引逐个取值,再收集到新的数组

sql 复制代码
with t as (select split('123', space(0)) as arr)
select array(arr[0],arr[1],arr[2]) from t     -- [1,2,3]

-- 如果初始数组中包含NULL,使用下标取元素时,NULL将会被放在最前面的位置
with t as (select array(1,2,3,NULL) as arr)
select array(arr[1],arr[2],arr[3]) from t     -- [1,2,3]

3、使用posexplode()

方式2:使用posexplode()分解数组,过滤pos<=N,再收集到新的数组

sql 复制代码
with t as (select split('123', space(0)) as arr)
select collect_list(tmp.ele) from t
lateral view outer posexplode(arr) tmp as pos,ele
where pos < 3
group by arr     -- [1,2,3]

4、转换为字符串操作

方式3:先转换为字符串,再截取特定长度后转换为数组

数组转换为字符串后的总长度计算公式:

python 复制代码
size(arr)+(size(arr)-1)

数组去除前N个元素剩余元素转换为字符串的长度计算公式:

python 复制代码
(size(arr)-N)*2

则需要截取的前N个元素转换成字符串的长度计算公式为:

python 复制代码
(size(arr)+(size(arr)-1))-(size(arr)-N)*2 = 2*N-1
sql 复制代码
with t as (select split('1,2,3,4', ',') as arr)
select split(substring(concat_ws(',',arr), 0, 2*3-1), ',')
from t           -- [1,2,3]

with t as (select split('123', space(0)) as arr)
select split(substring(concat_ws(',',arr), 0, 2*3-1), ',')
from t           -- [1,2,3]
相关推荐
CarIise3 小时前
Spring Boot整合MyBatis与文件上传:从分层架构到文件上传下载实战
数据仓库·hive·hadoop
IT毕设梦工厂2 天前
计算机毕业设计选题推荐:基于大数据的供应链数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·hadoop·python·数据分析·spark·课程设计
IT毕设梦工厂2 天前
计算机毕业设计选题推荐:基于大数据的城市尾气排放数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·信息可视化·spark·毕业设计·课程设计·大数据毕设项目
IT毕设梦工厂2 天前
计算机毕业设计选题推荐:基于大数据的房地产交易数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·hadoop·python·数据分析·spark·课程设计
小程序设计2 天前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
卷毛迷你猪8 天前
快速实验篇(A11)数据集成与多维分析:从单实验产出到跨实验宽表
hive·hadoop
Francek Chen9 天前
【大数据处理与分析】数据仓库Hive:04 数据仓库Hive概述
大数据·数据仓库·hive·hadoop·分布式
姜穆澜10 天前
Apache Hive 4.x 完全学习指南
大数据·hive
Gl�ria14 天前
Hive SQL 执行卡住完整排查 & 处理
hive·hadoop·sql
网络豆16 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos