HiveQL查询操作全解(二):常用函数

本篇介绍一下一些常用的HIVE(0.80版本)内置函数:

1、数学函数

返回值类型样式描述
BIGINTfloor(DOUBLE d)返回小于等于d的最大整数
BIGINTceil(DOUBLE d)返回大于等于d的最小整数
DOUBLErand(),rand(INT seed)返回一个DOUBLE型的随机数,seed是随机因子
DOUBLEpow(DOUBLE d,DOUBLE p)计算d的p次幂
DOUBLEsqrt(DOUBLE d)计算d的平方根
DOUBLEabs(DOUBLE d)计算d的绝对值

2、聚合函数

聚合函数是一类比较特殊的函数,可以对多行进行一些计算,然后得到一个结果值,这类函数中最有名的两个例子就是count和avg,分别计算行数和平均值。

hive中常用的聚合函数有:

返回值类型样式描述
BIGINTcount(*)计算总行数,包括含有NULL值的行
BIGINTcount(expr)计算提供的expr表达式的值非NULL的行数
BIGINTcount(DISTINCT expr)计算提供的expr表达式的值排重后非NULL的行数
DOUBLEsum(col)计算制定行的值的和
DOUBLEsum(DISTINCT col)计算排重后值的和
DOUBLEavg(col)计算指定行的值的平均值
DOUBLEavg(DISTINCT col)计算排重后值的平均值
DOUBLEmin(col)计算指定行的最小值
DOUBLEmax(col计算指定行的最大值

3、表生成函数

与聚合函数相反的一类函数就是所谓的表生成函数,其可以将单列扩展为多列或者多行。比如下面的例子可以将一个字符串数组的内容转换成0个或者多个新的记录行。如果subordinates字段内容为空的话,将不会产生新的记录,如果不为空的话,这个数组中的每个元素都将产生一行新纪录。

SELECT explode(subordinates) AS sub FROM employees;

Hive中常用的表生成函数有:

返回值类型样式描述
n行结果explode(ARRAY array)返回0到多行结果,每行对应输入的array数组中的一个元素
n行结果explode(MAP map)返回0到多行结果,每行对应每个map键值对,其中一个字段是map的键,另一个字段对应map的值
数组的类型explode(ARRAY<TYPE> a)对于a中的每个元素,explode()会产生一行记录包含这个元素
结果插入表中Inline(ARRAY<STRUCT[,STRUCT]>)将结构体数组提取出来并插入到表中
TUPLEjson_tuple(STRING jsonStr,p1,p2,…pn)本函数可以接受多个标签名称,对输入的JSON字符串进行处理,和get_json_object这个UDF类似,不过更高效,其通过一次调用就可以获得多个键值
TUPLEparse_url_tuple(url,partname1,partname2,…..mpartnameN),N>=1从URL中解析出N个部分信息,其输入参数是URL,以及多个要抽取的部分的名称
N行结果stack(INT n,col1,….,colM)把M列转换成N行,每行有M/N个字段,其中n必须是个常数

4、其他内置函数

Hive还提供了许多其他功能强大的内置函数:

返回值类型样式描述
STRINGconcat(STRING s1,STRING s2,…..)将字符串s1,s2等拼接成一个字符串
STRINGconcat_ws(STRING separator,STRING s1,STRING s2,…)将字符串s1,s2等根据指定的分隔符separator拼接起来
INTfind_in_set(STRING s,STRING commaSeparatedString)返回以逗号分隔的字符串中s出现的位置,如果没有找到返回NULL
STRINGget_json_object(STRING json_string,STRiNG path)从给定路径上的JSON字符串中抽取出JSON对象,并返回这个对象的JSON字符串形式,如果输入的JSON字符串是非法的,返回NULL
INTlength(STRING s)计算字符串的长度
STRINGlower(STRING s)将字符串转换为小写形式
STRINGregexp_extract(STRING subject,STRING regex_pattern,STRING index)抽取字符串subject中符合正则表达式regex_pattern的第index个部分的子字符串,index为0表示整个字符串,从1开始表示各个字串
STRINGregexp_replace(STRING s,STRING regex,STRING replacement)按照Java正则表达式regex将字符串s中符合条件的部分替换为replacement所指定的字符串a
STRINGreverse(STRING s)反转字符串
STRINGsize(MAP/ARRAY)返回map或者ARRAY中元素的个数
ARRAY<STRING>split(STRING s,STRING pattern)按照正则表达式pattern分割字符串s,并将分割后的部分以字符串数组方式返回
STRINGupper(STRING A)将字符串中所欲字母转换为大写字母
STRINGfrom_unixtime(BIGINT unixtime[,STRING format])将时间戳描述转换成UTC时间,并用字符串表示,可以通过format规定的时间格式,指定输出的时间格式
BIGINTunix_timetime(STRING date)输入的时间字符串格式必须是yyyy-MM-dd HH:MM:SS,如果不符合则返回0,如果符合则将此时间字符串转换为Unix时间戳。
BIGINTunix_timetime(STRING date,STRING pattern)将指定时间字符串格式字符串转换为unix时间戳,如果格式不对则返回0
INTdatediff(STRING startdate,STRING enddate)计算开始时间startdate到结束时间enddate相差的天数
    原文作者:石晓文的学习日记
    原文地址: https://www.jianshu.com/p/96b7b2b850bd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞