Hive函数

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值