单行函数
一进一出(一行进入,一行输出) 单行函数分类: 日期函数、字符串函数、集合函数、数学函数、流程控制函数
算术运算函数
| 运算符 | 描述 |
|---|---|
| A+B | A和B 相加 |
| A-B | A减去B |
| A*B | A和B 相乘 |
| A/B | A除以B |
| A%B | A对B取余 |
| A&B | A和B按位取与 |
| A|B | A和B按位取或 |
| A^B | A和B按位取异或 |
| ~A | A按位取反 |
数值函数
- round:四舍五入
hive> select round(3.3); 3
- 向上取整
hive> select ceil(3.1) ; 4
- floor:向下取整
hive> select floor(4.8); 4
字符串函数
-
upper:转大写
语法:upper(string A)
返回值:string
-
lower:转小写
语法:lower(string A) lcase(string A)
返回值:string
-
length:获取字符串长度
语法:length(string A)
返回值:in
-
trim:去除字符串两边的空格
语法:trim(string A)
返回值:string
-
substring:截取字符串
语法一:substring(string A, int start)
返回值:string
说明:返回字符串A从start位置到结尾的字符串
语法二:substring(string A, int start, int len)
返回值:string
说明:返回字符串A从start位置开始,长度为len的字符串
-
replace 替换
regexp_replace:支持的正则的替换
语法:regexp_replace(string A, string B, string C)
返回值:string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符
-
regexp:字符串能否被正则匹配
返回值:boolean
-
regexp_extract 正则匹配字符串分组
语法:regexp_extract(string subject, string pattern, int index)
返回值:string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符
-
repeat 将字符串复制多次
语法:repeat(string A, repeat_num)
-
split 将字符串进行切割
语法:split(string str, string pat)
返回值:array
说明:按照pat字符串分割str,会返回分割后的字符串数
-
nvl 替换null值
语法:nvl(value,default_value)
说明:如果为value为null,则输出后面的值,不为null输出其本身
-
concat 拼接字符串
语法:concat(string A , string B , string C ...)
-
concat_ws 以指定分隔符拼接字符串或者字符串数组
语法:concat_ws(sep , string A , string B , string C ...)
日期函数
-
unix_timestamp:返回当前或指定时间的时间戳 语法:unix_timestamp() 返回值:bigint
-
from_unixtime:
转化UNIX时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式 语法:from_unixtime(bigint unixtime[, string format]) 返回值:string
-
current_date:当前日期
-
current_timestamp:当前的日期加时间,并且精确的毫秒
-
month:获取日期中的月 语法:month (string date) 返回值:int
-
day:获取日期中的日 语法:day (string date) 返回值:int
-
hour:获取日期中的小时 语法:hour (string date) 返回值:int
-
dayofmonth:当前时间是一个月中的第几天 语法:dayofmonth (string date) 返回值:int
-
datediff:两个日期相差的天数(结束日期减去开始日期的天数) 语法:datediff(string enddate, string startdate) 返回值:int
-
date_add:日期加天数 语法:date_add(string startdate, int days) 返回值:string 说明:返回开始日期 startdate 增加 days 天后的日期
-
date_sub:日期减天数 语法:date_sub (string startdate, int days) 返回值:string 说明:返回开始日期startdate减少days天后的日期
-
date_format:将标准日期解析成指定格式字符串
流程控制函数
- case when:条件判断函数
语法一:
case when a then b [when c then d]* [else e] end返回值:T 说明:如果a为true,则返回b;如果c为true,则返回d;否则返回 e 语法二:case a when b then c [when d then e]* [else f] end返回值: T 说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f - if: 条件判断,类似于Java中三元运算符
语法:
if(boolean testCondition, T valueTrue, T valueFalseOrNull)返回值:T 说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull
集合函数
- size:集合中元素的个数
- map:创建map集合 语法:map (key1, value1, key2, value2, …) 说明:根据输入的key和value对构建map类型
- map_keys: 返回map中的key
- map_values: 返回map中的value
- array 声明array集合 语法:array(val1, val2, …) 说明:根据输入的参数构建数组array类
- array_contains: 判断array中是否包含某个元素
- sort_array:将array中的元素排序
- struct声明struct中的各属性 语法:struct(val1, val2, val3, …) 说明:根据输入的参数构建结构体struct类
- named_struct声明struct的属性和值
高级聚合函数
多进一出 (多行传入,一个行输出) collect_list 收集并形成list集合,结果不去重 collect_set 收集并形成set集合,结果去重
炸裂函数
- explode 将数组或者map展开
hive> select explode(array('a','b','d','c'));
结果:
a
b
d
c
- lateral view 侧写
用法:lateral view udtf(expression) tableAlias AS columnAlias
解释:lateral view用于和split,explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
窗口函数
窗口函数的语法
基本语法:函数 + over( [partition by ...] [order by ...] [窗口子句] )
-
over表示开窗,默认窗口大小会包含所有数据 -
partition by表示根据字段再划分一个细窗口,相同字段进入同一个细窗口里面,每个窗口之间相互独立,窗口子句对于每个细窗口独立生效 -
order by表示窗口内按什么排序,如果只有over表示直接最大窗口排序;如果有partition by每个细窗口单独排序。 -
窗口子句,可以进一步限定范围
语法:
(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
示例:
rows between unbounded preceding and unbounded following
行的范围为上无边界到下无边界(第一行到最后一行)
注:窗口函数是一行一行执行的
常见窗口函数
-
窗口函数
- lag(col,n,default_val):往前第n行数据
- lead(col,n, default_val):往后第n行数据
- first_value (col,true/false):当前窗口下的第一个值,第二个参数为true,跳过空值
- last_value (col,true/false):当前窗口下的最后一个值,第二个参数为true,跳过空值
-
聚合函数
-
max:最大值
-
min:最小值
-
sum:求和
-
avg:平均值
-
count:计数
-
-
排名分析函数
-
rank:排名相同时会重复总数不会减少
-
dense_rank:排名相同时会重复总数会减少
-
row_number:行号
-
ntile:分组并给上组号
-