Hive之函数

Hive之函数

第一节:内置函数

一、显示内置函数列表

      show functions;

默认271个

二、查看函数的基本使用

      desc function funname;

desc function max;

三、查看函数的详细使用教程

      desc function extended funname;

desc function extended max;

四、函数分类

1、UDF

      USER DEFINE FUNCTION 用户定义函数,进一路出一路

2、UDAF

      USER DEFINE aggregate FUNCTION  用户定义聚合函数,进多路出一路

3、UDTF

      USER DEFINE table FUNCTION  用户定义表函数,进一路出多路

      explode 炸裂

第二节:常用函数之数值

一、ceil

      向上取整 

      ceil(x)  大于等于参数的第一个整数

二、floor

      向下取整

      floor(x)  小于等于参数的第一个整数

三、round

      round(x[, d]) 参数1 需要四舍五入的数 参数2:小数位数

      select round(3.556789);

      select round(3.556789,2);

四、rand

      求随机数  0-1

      rand([seed])  参数:随机数种子,种子一样的,随机数固定的。

      一般使用无参的select rand();

第二节:常用函数之字符串

一、简介

      hive中的字符串,下标1开始的,字符串从右向左标记-1开始的。

二、split

      split(str, regex)  参数1 字符串 参数2 切分的分隔符

      select split("a,b,c,d",","); 返回值 数组类型

三、instr

      instr(str, substr) 参数1:原始字符串,参数2:需要查找的子字符串

      返回子字符串在原始字符串中第一次出现的位置,不存在 0

      select instr("hello word","wo");

      select instr("hello word","ww");

四、大小写

      ucase  大写

lcase  小写

upper  大写

lower  小写

ucase(str)

五、字符串切分

      substr

substring

substr(str, pos[, len])  参数1 字符串 参数2 位置 参数3 截取长度

六、去空格

      trim(str)  去前后空格

ltrim(str)   去前空格

rtrim(str)   去后空格

七、拼接

      concat(str1, str2, ... strN)  将参数拼接为一个字符串

concat_ws(分隔符,str1,str2....)  按照一定的分隔符,拼接字符串的

八、字符串长度

length 返回字符串长度

第三节:常用函数之日期

一、获取当前系统时间戳

      current_timestamp()

select current_timestamp();  日期 时间

current_date

select current_date();  获取当前系统的日期的

二、时间戳->日期

      from_unixtime

from_unixtime(unix_time, format)  参数1 时间戳 参数2 日期格式

select from_unixtime(1558281600,"yyyy-MM-dd hh:mm:ss");

时间戳转成日期,其中时间戳必须是整形。

三、日期->时间戳

unix_timestamp(date[, pattern])  参数1 日志 参数2 参数1的表达式

select unix_timestamp("2019-5-20 17:27:56","yyyy-MM-dd hh:mm:ss");

四、时间提取

year 年

month 月

day

hour

minute

second

select year("2019-3-4");

五、其他

      to_date:返回日期

date_add:当前日期加几天

date_sub:当前日期  减几天

day:当前日期的号

month:当前日期是几月份

year:当前日期是哪一年

2018-6-30

weekofyear:给定的日期的周数

第四节:常用函数之类型转换

      cast(原始数据 as 需要转换的类型)

      cast(age as bigint)

第五节:常用函数之条件判断

一、if

      if(判断,返回值1,返回值2);

      类似java中的三元运算符

二、nvl

      nvl(需要判断的字段,参数1为null的返回值);

      用于处理null值

三、coalesce

      coalesce;

      返回第一个不为null的值

第六节:常用函数之炸裂函数

一、简介

      explode:炸裂函数,将数组或map集合进行炸裂。

      数组或map集合中的每一个元素为一行[1,2,3,4]{a:1,b:2}

      对于数组每个元素只有一个,炸裂的结果只有一列,对于map每个元素有k-v 炸裂出来的结果2列。

二、单独使用

      作为查询的参数

第七节:常用函数之窗口函数

一、概念

      hive中提供的,运用一定的语法,可以按照我们的用户需求,将表中的数据分成多个独立的部分,每一个部分都是单独执行的,每一个部分数据称为一个窗口,每一个窗口内部的逻辑只执行当前窗口的数据,不会垮窗口执行数据。

      开窗函数一般和其他的功能性函数一起使用,在都出开窗的那一字段。

      在over子句中可以只给排序,默认只有一个窗口。

二、over子句

1、简介

      over子句用于指定开窗的,每一个“窗口”依据。一般情况下,指定的每一个窗口按照某一个字段相同的数据放在每一个窗口中。

over(指定开窗依据的字段 指定每一个窗口内的排序规则)

2、开窗依据

      必须要指定的。

      一旦指定开窗依据的字段,就会将相同的字段值,放在一个窗口中。

语法:

distribute by 字段名

      partition by 字段名

3、排序规则

      可以指定,也可以不指定。

语法:

sort by --- distribute by

      order by --- partition by

4、总结

      over(partition by ...order by ..)

   over(distribute by ....sort by )

      over子句(开窗)不能单独使用,需要配合一些功能性的函数一起使用。

三、配合聚合函数

1、简介

      max(字段) | sum(字段) + over子句,根据over子句指定的开窗规则,进行求每一个窗口内部的最大值 | 总和。

      一般用于利润累计,目前最大值等

四、分组求topN

1、简介

rank|dense_rank 添加排名的,每个开窗内部,添加排名的

row_number添加行号的,1开始的

原文地址:https://www.cnblogs.com/lizm166/p/13354967.html