Hive函数

本文介绍了Hive中查询函数的使用,包括显示所有函数、描述函数功能及详情。详细讲解了如何创建和删除临时及永久自定义函数,特别是使用JavaUDF的方法。此外,还深入探讨了窗口函数的概念,如COUNT、RANK等,并解析了窗口的控制,包括PARTITIONBY和ORDERBY的用法。

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()中有partitionorder by时,或只有over()时。窗口子句默认的范围 rows BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值