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

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

1、数学函数

返回值类型 样式 描述
BIGINT floor(DOUBLE d) 返回小于等于d的最大整数
BIGINT ceil(DOUBLE d) 返回大于等于d的最小整数
DOUBLE rand(),rand(INT seed) 返回一个DOUBLE型的随机数,seed是随机因子
DOUBLE pow(DOUBLE d,DOUBLE p) 计算d的p次幂
DOUBLE sqrt(DOUBLE d) 计算d的平方根
DOUBLE abs(DOUBLE d) 计算d的绝对值

2、聚合函数

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

hive中常用的聚合函数有:

返回值类型 样式 描述
BIGINT count(*) 计算总行数,包括含有NULL值的行
BIGINT count(expr) 计算提供的expr表达式的值非NULL的行数
BIGINT count(DISTINCT expr) 计算提供的expr表达式的值排重后非NULL的行数
DOUBLE sum(col) 计算制定行的值的和
DOUBLE sum(DISTINCT col) 计算排重后值的和
DOUBLE avg(col) 计算指定行的值的平均值
DOUBLE avg(DISTINCT col) 计算排重后值的平均值
DOUBLE min(col) 计算指定行的最小值
DOUBLE max(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 a) 对于a中的每个元素,explode()会产生一行记录包含这个元素
结果插入表中 Inline(ARRAY) 将结构体数组提取出来并插入到表中
TUPLE json_tuple(STRING jsonStr,p1,p2,...pn) 本函数可以接受多个标签名称,对输入的JSON字符串进行处理,和get_json_object这个UDF类似,不过更高效,其通过一次调用就可以获得多个键值
TUPLE parse_url_tuple(url,partname1,partname2,.....mpartnameN),N>=1 从URL中解析出N个部分信息,其输入参数是URL,以及多个要抽取的部分的名称
N行结果 stack(INT n,col1,....,colM) 把M列转换成N行,每行有M/N个字段,其中n必须是个常数

4、其他内置函数

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

返回值类型 样式 描述
STRING concat(STRING s1,STRING s2,.....) 将字符串s1,s2等拼接成一个字符串
STRING concat_ws(STRING separator,STRING s1,STRING s2,...) 将字符串s1,s2等根据指定的分隔符separator拼接起来
INT find_in_set(STRING s,STRING commaSeparatedString) 返回以逗号分隔的字符串中s出现的位置,如果没有找到返回NULL
STRING get_json_object(STRING json_string,STRiNG path) 从给定路径上的JSON字符串中抽取出JSON对象,并返回这个对象的JSON字符串形式,如果输入的JSON字符串是非法的,返回NULL
INT length(STRING s) 计算字符串的长度
STRING lower(STRING s) 将字符串转换为小写形式
STRING regexp_extract(STRING subject,STRING regex_pattern,STRING index) 抽取字符串subject中符合正则表达式regex_pattern的第index个部分的子字符串,index为0表示整个字符串,从1开始表示各个字串
STRING regexp_replace(STRING s,STRING regex,STRING replacement) 按照Java正则表达式regex将字符串s中符合条件的部分替换为replacement所指定的字符串a
STRING reverse(STRING s) 反转字符串
STRING size(MAP/ARRAY) 返回map或者ARRAY中元素的个数
ARRAY split(STRING s,STRING pattern) 按照正则表达式pattern分割字符串s,并将分割后的部分以字符串数组方式返回
STRING upper(STRING A) 将字符串中所欲字母转换为大写字母
STRING from_unixtime(BIGINT unixtime[,STRING format]) 将时间戳描述转换成UTC时间,并用字符串表示,可以通过format规定的时间格式,指定输出的时间格式
BIGINT unix_timetime(STRING date) 输入的时间字符串格式必须是yyyy-MM-dd HH:MM:SS,如果不符合则返回0,如果符合则将此时间字符串转换为Unix时间戳。
BIGINT unix_timetime(STRING date,STRING pattern) 将指定时间字符串格式字符串转换为unix时间戳,如果格式不对则返回0
INT datediff(STRING startdate,STRING enddate) 计算开始时间startdate到结束时间enddate相差的天数

你可能感兴趣的:(HiveQL查询操作全解(二):常用函数)