hive中array相关函数总结

news/2024/11/24 5:36:32/

目录

  • hive官方函数解释
  • 示例
  • 实战

hive官方函数解释

hive官网函数大全地址: hive官网函数大全地址

Return TypeNameDescription
arrayarray(value1, value2, …)Creates an array with the given elements.
booleanarray_contains(Array, value)Returns TRUE if the array contains value.
arraysort_array(Array)Sorts the input array in ascending order according to the natural ordering of the array elements and returns it (as of version 0.9.0).
Texplode(ARRAY a)Explodes an array to multiple rows. Returns a row-set with a single column (col), one row for each element from the array.
int,Tposexplode(ARRAY a)Explodes an array to multiple rows with additional positional column of int type (position of items in the original array, starting with 0). Returns a row-set with two columns (pos,val), one row for each element from the array.

示例

1、array(value1, value2, …)
创建一个 Array 对象,由一组值组成。

SELECT array(85, 90, 78, 92, 86) AS scores;
---结果
scores
[85,90,78,92,86]

2、array_contains(Array, value)
判断一个值是否在 Array 对象中存在。

SELECT array_contains(array(85, 90, 78, 92, 86), 60) AS is_passed;
---结果
is_passed
falseSELECT if(array_contains(array(85, 90, 78, 92, 86), 60),1,0) AS is_passed;
---结果
is_passed
0

3、sort_array(Array)
sort_array 函数可以用于对 Array 对象中的元素进行排序。具体来说,sort_array 函数会将 Array 对象中的元素按照升序顺序进行排序,并返回一个新的排序后的 Array 对象。

SELECT sort_array(array(85, 90, 78, 92, 86)) AS sorted_scores;
---结果
sorted_scores
[78,85,86,90,92]

4、explode (array)
explode 函数可以用于将一个 Array 对象拆分成多行。具体来说,explode 函数会将 Array 对象中的每个元素拆分成一行,并与原始数据集中的其他字段一起返回。

select explode(array('A','B','C'));
select explode(array('A','B','C')) as col;
select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf;
select tf.* from (select 0) t lateral view explode(array('A','B','C')) tf as col;---上述四个结果均为
col
A
B
C

5、posexplode (array)

select posexplode(array('A','B','C'));
select posexplode(array('A','B','C')) as (pos,val);
select tf.* from (select 0) t lateral view posexplode(array('A','B','C')) tf;
select tf.* from (select 0) t lateral view posexplode(array('A','B','C')) tf as pos,val;
---上述四个结果均为
pos          col	
0             A	
1             B
2             C

实战

下面全年级的学生成绩单的部分,包含学生姓名,课程,分数,年级排名,要求将每人的成绩进行汇总整理:按排名,课程和成绩的顺序
数据:

    '小明' ,'语文'  ,80 as score , 100 '小明' ,'数学'  ,90 as score,  85 '小明' ,'英语'  ,75 as score,  203 '小花' ,'语文'  ,85 as score , 90 '小花' ,'数学'  ,65 as score , 350 '小花' ,'英语'  ,90 as score , 20 

代码实现:

with students as(select '小明' as name,'语文' as course ,80 as score , 100 as rkunion all select '小明' as name,'数学' as course ,90 as score,  85 as rkunion all select '小明' as name,'英语' as course ,75 as score,  203 as rkunion all select '小花' as name,'语文' as course ,85 as score , 90 as rkunion all select '小花' as name,'数学' as course ,65 as score , 350 as rkunion all select '小花' as name,'英语' as course ,90 as score , 20 as rk
)
SELECT name, concat_ws(',', sort_array(collect_list(concat_ws(':', lpad(cast(rk as string), 4, '0'), course, cast(score as string) )))) AS sorted_scores
FROM students
GROUP BY name;
---结果
name                          sorted_scores
小明                 0085:数学:90,0100:语文:80,0203:英语:75
小花                 0020:英语:90,0090:语文:85,0350:数学:65

http://www.ppmy.cn/news/1278844.html

相关文章

【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发

文章目录 实验架构图1. 准备实验环境2. 创建CloudFront分配、配置动、静态资源分发2.1 创建CloudFront分配,添加S3作为静态资源源站2.2 为CloudFront分配添加动态源站 在本实验——使用CloudFront进行全站加速中,将了解与学习Amazon CloudFront服务&…

STM32项目设计:智能门禁系统核心板版本 4种解锁方式

文章目录 一、项目简介二、原理图设计![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/809dd6c70b34425eb42f69187020c717.png)程序设计 哔哩哔哩视频链接: https://www.bilibili.com/video/BV1K64y1V7Y9?p4&spm_id_frompageDriver&vd_sourcee…

2023/12/21作业

思维导图 代码 .text .global _start _start: 灯1 gpio时钟使能 [4]->1 0x5000A28 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0]将寄存器取出放到R1 ORR R1,R1,#(0x1<<4)将第四位设置为1 STR R1,[R0]读取R0寄存器到R1 PE…

ruoyi若依前后端分离版部署centos7服务器(全)

目录 VMware虚拟机 centos7 安装环境如下 一、msql 5.7 二、nginx1.23.3 三、java8 四、redis 3.2.1 五、部署若依前端 六、部署若依后端 前言 虚拟机的桥接与nat模式 : 重点 重点&#xff01;&#xff01;&#xff01; 无线不可以用桥接模式 &#xff0c;而你用了nat模式会…

负载均衡:一致性哈希解决了哪些问题?

在业务开发中&#xff0c;缓存服务和其他数据服务一样&#xff0c;需要满足高可用性&#xff0c;而高可用最常用的手段就是集群扩展。 缓存的集群高可用 目前 Redis 流行的集群方案有 官方 Cluster 方案、twemproxy 代理方案、哨兵模式、Codis 等方案&#xff0c;关于这几种方…

CSS新手入门笔记整理:CSS3动画

平移&#xff1a;translate() 语法 transform: translateX(x);    /*沿x轴方向平移*/ transform: translateY(y);    /*沿y轴方向平移*/ transform: translate(x, y);   /*沿x轴和y轴同时平移*/ 缩放&#xff1a;scale() 语法 transform: scaleX(x);    /*沿x轴…

Qt通用属性工具:随心定义,随时可见(一)

一、开胃菜&#xff0c;没图我说个DIAO 先不BB&#xff0c;给大家上个效果图展示下&#xff1a; 上图我们也没干啥&#xff0c;几行代码&#xff1a; #include "widget.h" #include <QApplication> #include <QObject> #include "QtPropertyEdit…

自定义通用物联网网关的MIB结构的参考

文章目录 说明参考代码开源项目地址 说明 由于时间有限&#xff0c;本人精力有限&#xff0c;所以给出的网关MIB结构&#xff0c;并非完美&#xff01;本文网关MIB结构的结构定义构思在使用MIB builder自定义物联网网关的MIB结构欢迎小伙伴&#xff0c;点赞、关注和评论&#…