在hive中,可以使用substr()函数截取字符串,比如从日期中截取年份、月份等信息。
还有一个函数是substring(),用法基本上与substr()相同,至于区别这里暂时不做研究。
substr()——在字符串A中从指定位置开始截取一定长度的字符。
substr(string A, int start,int length)
- string A——输入需要处理的字符串
- int start——开始截取的位置索引(int),注意索引从1开始,如果此处输入0,结果与输入1相同。
- int length——截取的长度(int)
比如
- 处理日期的两种方式:
- substring(orderdate,1,7) = ‘2017-04’
- year(orderdate) = 2017 and month(orderdate) = 04
- 截取年月
2022-04-13'
substring(order_date,1,7)
结果:2022-04
两种特殊情况
当指定ORDER BY缺少WINDOW子句时,WINDOW规范默认为RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。
如果同时缺少ORDER BY和WINDOW子句,则WINDOW规范默认为ROW BETWEENUND UNBOUNDED PRECEDING和UNBOUNDED FOLLOWING。
以下函数在over()里面只能分区和排序,不能自定义窗口大小了,也就是不能再写window字句
排序分析函数 都不能写 例如: Rank, NTile, DenseRank, CumeDist, PercentRank.
Lead 和 Lag不能写
排名函数
RANK() 排序相同时会重复,会跳号
DENSE_RANK() 排序相同时会重复,不会跳号
ROW_NUMBER() 会根据顺序计算
FIRST_VALUE (col,true/false):当前窗口下的第一个值,第二个参数为true,跳过空值
LAST_VALUE (col,true/false):当前窗口下的最后一个值,第二个参数为true,跳过空值
NTILE(n):把有序窗口的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。