大数据开发学习1.5-Hive的函数

288 阅读6分钟

单行函数

一进一出(一行进入,一行输出) 单行函数分类: 日期函数、字符串函数、集合函数、数学函数、流程控制函数

算术运算函数

运算符描述
A+BA和B 相加
A-BA减去B
A*BA和B 相乘
A/BA除以B
A%BA对B取余
A&BA和B按位取与
A|BA和B按位取或
A^BA和B按位取异或
~AA按位取反

数值函数

  • round:四舍五入
hive> select round(3.3);   3
  • 向上取整
hive> select ceil(3.1) ;   4
  • floor:向下取整
hive> select floor(4.8);  4

字符串函数

  1. upper:转大写

    语法:upper(string A)

    返回值:string

  2. lower:转小写

    语法:lower(string A) lcase(string A)

    返回值:string

  3. length:获取字符串长度

    语法:length(string A)

    返回值:in

  4. trim:去除字符串两边的空格

    语法:trim(string A)

    返回值:string

  5. substring:截取字符串

    语法一:substring(string A, int start)

    返回值:string

    说明:返回字符串A从start位置到结尾的字符串

    语法二:substring(string A, int start, int len)

    返回值:string

    说明:返回字符串A从start位置开始,长度为len的字符串

  6. replace 替换

    regexp_replace:支持的正则的替换

    语法:regexp_replace(string A, string B, string C)

    返回值:string

    说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符

  7. regexp:字符串能否被正则匹配

    返回值:boolean

  8. regexp_extract 正则匹配字符串分组

    语法:regexp_extract(string subject, string pattern, int index)

    返回值:string

    说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符

  9. repeat 将字符串复制多次

    语法:repeat(string A, repeat_num)

  10. split 将字符串进行切割

    语法:split(string str, string pat)

    返回值:array

    说明:按照pat字符串分割str,会返回分割后的字符串数

  11. nvl 替换null值

    语法:nvl(value,default_value)

    说明:如果为value为null,则输出后面的值,不为null输出其本身

  12. concat 拼接字符串

    语法:concat(string A , string B , string C ...)

  13. concat_ws 以指定分隔符拼接字符串或者字符串数组

    语法:concat_ws(sep , string A , string B , string C ...)

日期函数

  1. unix_timestamp:返回当前或指定时间的时间戳 语法:unix_timestamp() 返回值:bigint

  2. from_unixtime:

    转化UNIX时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式 语法:from_unixtime(bigint unixtime[, string format]) 返回值:string

  3. current_date:当前日期

  4. current_timestamp:当前的日期加时间,并且精确的毫秒

  5. month:获取日期中的月 语法:month (string date) 返回值:int

  6. day:获取日期中的日 语法:day (string date) 返回值:int

  7. hour:获取日期中的小时 语法:hour (string date) 返回值:int

  8. dayofmonth:当前时间是一个月中的第几天 语法:dayofmonth (string date) 返回值:int

  9. datediff:两个日期相差的天数(结束日期减去开始日期的天数) 语法:datediff(string enddate, string startdate) 返回值:int

  10. date_add:日期加天数 语法:date_add(string startdate, int days) 返回值:string 说明:返回开始日期 startdate 增加 days 天后的日期

  11. date_sub:日期减天数 语法:date_sub (string startdate, int days) 返回值:string 说明:返回开始日期startdate减少days天后的日期

  12. date_format:将标准日期解析成指定格式字符串

流程控制函数

  1. 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
  2. if: 条件判断,类似于Java中三元运算符 语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull) 返回值:T 说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull

集合函数

  1. size:集合中元素的个数
  2. map:创建map集合 语法:map (key1, value1, key2, value2, …) 说明:根据输入的key和value对构建map类型
  3. map_keys: 返回map中的key
  4. map_values: 返回map中的value
  5. array 声明array集合 语法:array(val1, val2, …) 说明:根据输入的参数构建数组array类
  6. array_contains: 判断array中是否包含某个元素
  7. sort_array:将array中的元素排序
  8. struct声明struct中的各属性 语法:struct(val1, val2, val3, …) 说明:根据输入的参数构建结构体struct类
  9. named_struct声明struct的属性和值

高级聚合函数

多进一出 (多行传入,一个行输出) collect_list 收集并形成list集合,结果不去重 collect_set 收集并形成set集合,结果去重

炸裂函数

  1. explode 将数组或者map展开
hive> select explode(array('a','b','d','c')); 

结果:

a
b
d
c 
  1. 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

行的范围为上无边界到下无边界(第一行到最后一行)

注:窗口函数是一行一行执行的

常见窗口函数

  1. 窗口函数

    • lag(col,n,default_val):往前第n行数据
    • lead(col,n, default_val):往后第n行数据
    • first_value (col,true/false):当前窗口下的第一个值,第二个参数为true,跳过空值
    • last_value (col,true/false):当前窗口下的最后一个值,第二个参数为true,跳过空值
  2. 聚合函数

    • max:最大值

    • min:最小值

    • sum:求和

    • avg:平均值

    • count:计数

  3. 排名分析函数

    • rank:排名相同时会重复总数不会减少

    • dense_rank:排名相同时会重复总数会减少

    • row_number:行号

    • ntile:分组并给上组号