Hive学习---4、函数(单行函数、高级聚合函数、炸裂函数、窗口函数)(二)

简介: Hive学习---4、函数(单行函数、高级聚合函数、炸裂函数、窗口函数)(二)
1.2.6 聚合函数

1、size:集合中元素个数

select size(friends) from test;  --2/2  每一行数据中的friends集合里的个数

2、map:创建map集合

--语法:map(key1,value1,key2,value2,...)
--说明:根据输入的key和value对构建map类型
select map('zhm',1,'zhm2',2);
输出:{"zhm":1,"zhm2":2}

3、map_keys:返回map中的key

select map_keys(map('zhm',1,'zhm2',2))
输出:["zhm","zhm1"]

4、map_keys:返回map中的key

select map_values(map('zhm',1,'zhm2',2))
输出:[1,2]

5、array声明array集合

--语法:array(val1,val2,...)
--说明:根据输入的参数构建数组array类
select array('1','2','3','4');
输出:["1","2","3","4"]

6、array_contains:判断array中是否包含某元素

select array_contains(array('a','b','c'),'a');
输出:true

7、sort_array:将array中的元素排序

select sort_array(array('a','d','c'))
输出:['a','c','d']

8、struct声明struct中的各属性

--语法:struct(val1,val2,val3,...)
--说明:根据输入的参数构建结构体struct类
select struct('name','age','weight');
输出:{"col1":"name","col2":"age","col3":"weight"}

9、named_struct声明struct的属性和值

select named_strcut('name','zhm','age',18,'weight',80);
输出:{"name":"zhm","age":18,"weight":80}

1.3 高级聚合函数

多进一出(多行传入,一行输出)

1、collect_list() 收集并形成list集合,结果不去重

select 
  sex,
  collect_list(job)
from employee
group by  sex

结果:

女 [“行政”,“研发”,“行政”,“前台”]

男 [“销售”,“研发”,“销售”,“前台”]

2、collect_set() 收集并形成set集合,结果去重

select 
  sex,
  collect_set(job)
from employee
group by  sex

结果:

女 [“行政”,“研发”,“前台”]

男 [“销售”,“研发”,“前台”]

1.4 炸裂函数(UDTF)

UDTF(Table-generating Functions),接受一行数据,输出一行或多行数据

9fd19e370d554fa399c3383cadbb1a00.png

1、数据准备

(1)表结构

movie category
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难

(2)建表语句

create table movie_info(
    movie string,     --电影名称
    category string   --电影分类
) 
row format delimited fields terminated by "\t";

(3)输入数据

insert overwrite table movie_info
values ("《疑犯追踪》", "悬疑,动作,科幻,剧情"),
("《Lie to me》", "悬疑,警匪,动作,心理,剧情"),("《战狼2》", "战争,动作,灾难");

2、需求

(1)根据上述电影信息表,统计各分类的电影数量,期望结果如下:


剧情 2
动作 3
心理 1
悬疑 2
战争 1
灾难 1
科幻 1
警匪 1

(2)代码实现

select cate count(*)
from (
  select movie,cate
  from (
    select movie 
    spilt(category,',') cates
    from movie_info
  ) t1 lateral view explode(cates) tmp as cate
) t2
group by cate;

1.5 窗口函数(开窗函数)

1.5.1 概述

窗口函数,能为每行数据划分一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回给该行的数据。

e996b862032142f493f88b6584c6124d.png

1.5.2 常用窗口函数

按照功能,常用窗口可划分如下几类:聚合函数、跨行取值函数、排名函数。

1、聚合函数

max:最大值。

min:最小值。

sum:求和。

avg:平均值。

count:计数。

2、跨行取值函数

(1)lead和lag

获取当前行的上/下边某行、某个字段的值

注意:lead和lag函数不支持自定义窗口

(2)first_value和last_value

获取窗口内某一列的第一个值/最后一个值

3、排名函数

常用的排名函数–rank、dense_rank、row_number

功能:计算排名

1.6 自定义函数

1、hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便扩展。

2、当Hive提供的内置函数无法满足你的业务处理需求时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

3、根据用户自定义函数类别分为以下三种:

(1)UDF(User-Defined-Function)

一进一出

(2)UDAF(User-Defined Aggregation Function)

用户自定义聚合函数,多进一出

(3)UDTF(User-Defined table-Generating Functions)

用户自定义表生成函数,一进多出

1.7 自定义UDF函数

相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
3月前
|
SQL JavaScript 前端开发
Hive根据用户自定义函数、reflect函数和窗口分析函数
Hive根据用户自定义函数、reflect函数和窗口分析函数
42 6
|
3月前
|
SQL JSON Java
Hive学习-数据查询语句
Hive学习-数据查询语句
36 6
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
211 1
|
7月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
272 0
|
7月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
309 0
|
7月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1166 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
68 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。