1 查询函数的用法
1. 显示系统自带所有函数
show functions;
2. 描述指定函数的作用
desc function 函数名;
3. 描述函数的详情信息(一般是都是有例子的)
desc function extended 函数名;
2 自定义函数
2.1 创建临时函数
# 使用java代码编写自定义的udf函数,使用maven打包成jar文件。jar包上传到Hive安装的服务器上
1.[dev@hadoop102]$ add jar /opt/module/hive/datas/myudf.jar;
2.在hive客户端中创建函数
create temporary function my_len as "com.dev.udf.MyUDF";
临时函数只对你当前的单次会话生效,并且可以跨库使用
3.删除临时函数
drop temporary function my_len;
2.2 创建永久函数
1.[dev@hadoop102]$ add jar /opt/module/hive/datas/myudf.jar;
2.创建函数
create function my_len2 as "com.dev.udf.MyUDF";
3.创建真正的永久函数。在哪个库下创建的函数,在哪个库下使用;其他库中使用时【库名】.【函数名】 调用
create function my_len3 as "com.dev.udf.MyUDF" using jar "hdfs://hadoop102:8020/udf/myudf.jar";
4.删除永久函数
drop function my_len2;
3 窗口函数
3.1 窗口函数
-
什么是窗口函数
MySQL 5.7、5.6没有窗口函数。 MySQL 8.0 才有窗口函数
Oracle 里面一直有
Hive也有 窗口函数
窗口函数是一个高阶函数 很吃资源 -
窗口函数的语法
窗口函数() over([partition by 字段...][order by 字段...][窗口子句])
窗口函数的顺序:
1.over 默认给你开一个最大的窗口(上无边界到下无边界)
2.partition 表示再次划分窗口
3.order by 窗口内排序
4.窗口子句 限定范围
5.窗口函数 真正执行 并且一行行执行的 -
以下函数是Hive中的窗口函数
--聚合函数
COUNT()
SUM()
MIN()
MAX()
AVG()
--排名分析函数
RANK()
ROW_NUMBER()
DENSE_RANK()
NTILE()
--窗口函数
LEAD(col,n,default_val):往后n行数据
LAG(col,n,default_val):往前第n行数据
FIRST_VALUE (col,true/false): 当前窗口下的第一个值,第二个参数为true,跳过空值 默认值为false
LAST_VALUE (col,true/false):当前窗口下的最后一个值,第二个参数为true,跳过空值 默认值为false
窗口函数 = 窗口 + 函数
窗口 :可以限定你函数计算的范围
3.2 窗口的控制
over 表示开窗:默认开一个最大的窗口,上无边界到下无边界
partition 表示:对over开的窗口中再次划分一个细窗口,按照partition的字段划分,字段中相同的数据进入同一个窗口中。窗口之间相互独立
order by 表示在窗口中的排序。
当有over但没有partition时,排序范围是over的范围;
当有over并且有partition时,排序范围是partition划分过后的范围。
窗口子句是什么
按行 | 范围 操作
(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING
并不是所有窗口函数都需要over()窗口子句
Rank, NTile, DenseRank, row_number, lag, lead
over()中只有order by时,窗口子句默认的范围 range BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
over()中有partition和order by时,或只有over()时。窗口子句默认的范围 rows BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.