HIVE SQL 高级分析函数及常用函数整理(持续更新)

个人整理,转载请注明来源

高级分析函数

返回值 函数名 说明 使用示例
返回类型取决于value_expr的类型 LAG ( value_expr [, offset ] [, default] )OVER ( [query_partition_clause] order_by_clause ) 通过该函数,可以不通过自连接同时去访问结果集中的其它行,它允许你像处理数组一样的去处理游标。给定一个查询结果集和游标的位置,就可以访问与当前行一起选择的以前的行。其相反的函数是LEAD。

1.offset是一个正整数,在用户没有设置的情况下其默认值为1,表示当前行的前面一行,若索引超出窗口的范围,就返回default值;

2.在用户没有设置default值的情况下,缺省默认返回NULL,用户可以根据所处理列的类型自行设定默认值。例如,如果该列为整型,则可以将默认值设为整数或NULL;

3.如果为浮点型,则可以将默认值设为浮点数或NULL;如果为字符串类型,则可以将默认值设为用单引号或双引号标识的字符串常量或NULL;如果是布尔型,则可以设为布尔值或NULL。
lag(cnt,1)OVER(PARTITION BY scene ORDER BY ds)
返回类型取决于value_expr的类型 LEAD (value_expr [, offset ] [, default ] ) OVER ( [query_partition_clause] order_by_clause ) 含义与LAG相反,只是它返回的是当前行的后面的行,其余部分和LAG函数一模一样。  
bigint ROW_NUMBER ( ) OVER ( [query_partition_clause] order_by_clause ) 返回每个分区内按照某些表达式排序后的行号,从1开始,为每条分组记录返回一个数字。NULL值被视为最小值。  
bigint RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 1.此函数没有参数,可以计算数据项在分区中的排名。在每个分区内,根据ORDER BY子句中表达式的值,计算查询返回的每一行与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加,有同样值的行得到同样的数字序号(认为NULL是相等的)。每次ORDER BY表达式的值发生变化时,该序列也随之增加。然而,如果两行得到同样的排序,则序数将随后跳跃,如两行序数为1,则没有序数
2.序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃,这也是它与DENSE_RANK的唯一区别

3.默认情况下,RANK()和DENSE_RANK()在递增排序中将空值指定为最低序号1,在递减排序中将空值指定为最高序号
 
bigint DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 1.此函数没有参数,在每个分区内,根据ORDER BY子句中表达式的值,计算查询返回的每一行与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加,有同样值的行得到同样的数字序号(认为NULL是相等的)。每次ORDER BY表达式的值发生变化时,该序号也随之增加,序号返回的时没有间隔的数。
2.RANK和DENSE_RANK的区别在于处理相等数据项的方法;RANK()在出现等级相同的元素时就将排名中的位置留出来,而DENSE_RANK()则不是。
 
Bigint或double,具体返回类型取决于value_expr的类型 SUM ( [ DISTINCT ] expr )OVER ( [query_partition_clause] [order_by_clause ] ) 1.该函数计算组中表达式的累积和;如果带有distinct,则返回的是该列中不同的值的总和。
2.OVER子句中最多只能有分区子句。

(3.如果应用中需要用到OVER子句为空的SQL语句,则可以通过使用聚集函数SUM来改写SQL实现一样的功能。)100版本后取消该限制。
 
bigint COUNT( 1 | [ DISTINCT ] expr)OVER ( [query_partition_clause] [order_by_clause] ) 用于计算一个查询返回的行数。如果参数是“1”,那么它返回所有行的总数,目前,count(1)仅限带query_partition_clause的情况下使用;如果参数是某个列,那么,它返回这个列的值非NULL的行的总数;如果带有distinct,则返回的是该列中不同值的数目。  
double AVG ( [ DISTINCT ] expr )OVER ([query_partition_clause] [order_by_clause] ) 用于计算平均值;如果带有distinct,则返回的是该列中不同的值的平均数。  
返回类型取决于expr的类型 MAX ( [ DISTINCT ] expr )OVER ( [query_partition_clause] [order_by_clause] ) 在一个分区中查找表达式的最大值;如果带有distinct,则返回的是该列中不同值的最大值。  
返回类型取决于expr的类型 MIN ( [ DISTINCT ] expr )OVER ( [query_partition_clause] [order_by_clause] ) 在一个分区中查找表达式的最小值;如果带有distinct,则返回的是该列中不同值的最小值。  
double RATIO_TO_REPORT ( expr )OVER ( [query_partition_clause] [order_by_clause] ) 用来计算某个值在一组值的总和中所占的比率。  
返回类型取决于expr的类型 FIRST_VALUE ( expr ) OVER ( [query_partition_clause] [order_by_clause] ) 用来计算一组值的第一个值  
返回类型取决于expr的类型 LAST_VALUE ( expr ) OVER ( [query_partition_clause] [order_by_clause] ) 用来计算一组值的最后一个值  

注: 

分区子句:

分区子句是在逻辑上对前面计算返回的记录集,即经过FROM/WHERE/GROUP BY/JOINS“筛选”后的结果集,按照exp1[,exp2,...expN]进行分组。其实,这里就和SELECT中的GROUP BY子句的功能有些类似,就是按照某些列对结果集分组。因此,在这里,单词“patition”和“group”是同义词。分析函数被独立作用于每个分组,并在每个分组上被重置。由于涉及到计算效率和任务成败,TDW要求所有的分析函数必须包含分区子句。

分区子句的语法  : 

PARTITION BY (exp1[,exp2,...expN])

分区排序子句的语法:

ORDER BY expr [ DESC | ASC ][,expr [ DESC | ASC ]]...

 

时间函数 

返回值 函数名 说明
string from_unixtime(int unixtime [, pattern]) 将unix纪元(1970-01-01 00:00:00 UTC)的秒数转换为一个字符串,该字符串表示当前系统时区中该时刻的时间戳,格式为“ 1970-01-01 00:00: 00“
pattern的默认值是yyyy-MM-dd HH:mm:ss,其中月份MM一定要大写,天dd一定要小写。
string datediff(string enddate,string startdate) 返回从开始日期到结束日期的天数:datediff('2009-03-01','2009-02-27')= 2或返回从开始日期到结束日期的天数:datediff('20090301','20090227' )= 2
string date_add(string startdate,int days) 添加开始日期的天数:date_add('2008-12-31',1)='2009-01-01'或添加开始日期的天数:date_add('20081231',1)='20090101'
string date_sub(string startdate,int days) 减少↑
  to_date(string str),to_date(string str, string format) 转换日期格式并返回。

 

条件函数 

返回值 函数名 说明
  if(boolean test Condition, T value TRUE, T value FALSE or NULL) 返回值当testCondition为TRUE时返回True,否则返回值FALSE或NULL
  COALESCE(T v1, T v2, ...) 返回第一个不为NULL的v,如果所有v均为NULL,则返回NULL
  CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END When a = b, returns c; when a = d, return e; else return f
  CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END When a = TRUE, returns b; when c = TRUE, return d; else return e

 

目录

高级分析函数

时间函数 

条件函数 


附: sql常用函数 

你可能感兴趣的:(hive,hive,sql,函数)