hive中array相关函数总结

目录

hive官方函数解释

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

Return Type Name Description
array array(value1, value2, ...) Creates an array with the given elements.
boolean array_contains(Array, value) Returns TRUE if the array contains value.
array sort_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).
T explode(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,T posexplode(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 对象,由一组值组成。

sql 复制代码
SELECT array(85, 90, 78, 92, 86) AS scores;
---结果
scores
[85,90,78,92,86]

2、array_contains(Array, value)

判断一个值是否在 Array 对象中存在。

sql 复制代码
SELECT array_contains(array(85, 90, 78, 92, 86), 60) AS is_passed;
---结果
is_passed
false

SELECT 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 对象。

sql 复制代码
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 对象中的每个元素拆分成一行,并与原始数据集中的其他字段一起返回。

sql 复制代码
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)

sql 复制代码
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

实战

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

数据:

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

代码实现:

sql 复制代码
with students as(
    select '小明' as name,'语文' as course ,80 as score , 100 as rk
        union all 
    select '小明' as name,'数学' as course ,90 as score,  85 as rk
        union all 
    select '小明' as name,'英语' as course ,75 as score,  203 as rk
        union all 
    select '小花' as name,'语文' as course ,85 as score , 90 as rk
        union all 
    select '小花' as name,'数学' as course ,65 as score , 350 as rk
        union 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
相关推荐
社恐码农2 小时前
Hive开窗函数的进阶SQL案例
hive·hadoop·sql
Leo.yuan4 小时前
数据湖是什么?数据湖和数据仓库的区别是什么?
大数据·运维·数据仓库·人工智能·信息可视化
weixin_3077791317 小时前
Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
linux·运维·c++·数据仓库·clickhouse
RestCloud1 天前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
行云流水行云流水1 天前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
IvanCodes1 天前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
冬至喵喵1 天前
【hive】函数集锦:窗口函数、列转行、日期函数
大数据·数据仓库·hive·hadoop
Theodore_10222 天前
大数据(2) 大数据处理架构Hadoop
大数据·服务器·hadoop·分布式·ubuntu·架构
簌簌曌2 天前
CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
大数据·hadoop·spark
Theodore_10222 天前
大数据(1) 大数据概述
大数据·hadoop·数据分析·spark·hbase