hive之内置函数(常用函数)

内置函数

  • 标准函数
    • 字符函数
    • 类型转换函数
    • 数学函数
    • 日期函数
    • 集合函数
    • 条件函数
  • 聚合函数
  • 表生成函数:输出可以作为表使用

标准函数

字符函数

返回值 函数 描述 举例 结果
string concat 字符串拼接 select concat(‘abc’,‘cd’,‘e’) abccde
string instr(string str, string substr) 查找字符串str中子字符串substr出现的位置 select instr(‘abcdabcd’,‘cd’) 3
string length 返回字符串的长度 select length(‘abcdef’) 6
string locate(string substr, string str[, int pos]) 查找字符串str中的pos位置后字符串substr第一次出现的位置 select locate(‘cd’,‘abcdabcd’,4) 7
string upper(string A) 将字符串A中的字母都变为大写 select upper(‘abcdef’) ABCDEF
string lower(string A) 将字符串A中的字母都变为小写 select lower(‘ASASre’) asasre
string regexp_replace 按正则表达式将字符串中符合条件的部分替换成指定的字符串 select regexp_replace(‘1999/5-5 13:24:12.234’,’\.[0-9]+’,’’) abccde
string split 通过正则表达式分割 select split(‘1999/5-5 13:24:12.234’,’\.’)[0] 1999/5-5 13:24:12
string substring 从指定位置开始截取指定长度的字符串 select substring(‘1999/5-5 13:24:12.234’,1,8) 1999/5-5
string trim 去掉两端的空格 select trim(" 1999/5-5 13:24:12.234 ") 1999/5-5 13:24:12.234
string str_to_map 将字符串按照指定分隔符转换成Map select str_to_map(‘1999/5-5 13:24:12.234’,’ ') {“13”:“24:12.234”,“1999/5-5”:null}
string encode 用指定字符集将字符串编码成二进制值 select encode(‘你好’,‘utf-8’) 你好
string reverse 反转 select reverse(‘abcd’) dcba
string concat_ws 用特定的符号将多个字符串合并成一个字符串 select concat_ws(’.’,‘www’,‘baidu’,‘com’) www.baidu.com
string ltrim 去掉字符串左边的空格 select ltrim(’ bbsbs ') bbsbs
string rtrim 去掉字符串右边的空格 select rtrim(’ bbsbs ') bbsbs
string regexp_extract 字符串正则表达式解析函数 select regexp_extract(‘1999-5-5 13:24:12.234’,’([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}) ([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})(\.[0-9]{2,3})’,0) 1999-5-5 13:24:12.234
string repeat 重复输出n次字符串 select repeat(‘abc’,3) abcabcabc
string format_number(number x, int d) 将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数 select format_number(2153342562.02146,3) 2,153,342,562.021
string get_json_object(string json_string, string path) 从指定路径上的JSON字符串抽取出JSON对象,并返回这个对象的JSON格式,如果输入的JSON是非法的将返回NULL,注意此路径上JSON字符串只能由数字 字母 下划线组成且不能有大写字母和特殊字符,且key不能由数字开头,这是由于Hive对列名的限制 select get_json_object(’{“name”:“zs”,“age”:“40”}’,’$.name’) zs
string lpad(string str, int len, string pad) 从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分 select lpad(‘abc’,6,’#’) ###abc
string parse_url 返回从URL中抽取指定部分的内容,参数有HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO select parse_url(“http://www.taobao.com”,‘HOST’)//拿域名 www.taobao.com
string sentences 将字符串转换成单词数组 select sentences(“hello world!how are you!”) [[“hello”,“world”],[“how”,“are”,“you”]]
string initcap 将字符串转换第一个字母大写其余字母的字符串 select initcap(“hello java, how are you”) Hello Java, How Are You

类型转换函数

返回值 函数 描述 举例 结果
“type” cast(expr as ) 将expr转换成type类型 如:cast(“1” as BIGINT) 将字符串1转换成了BIGINT类型
binary binary(stringbinary) 将输入的值转换成二进制

数学函数

返回值 函数 描述
DOUBLE round(DOUBLE a) 返回对a四舍五入的BIGINT值
DOUBLE round(DOUBLE a, INT d) 返回对a四舍五入并保留d位小数位的值
DOUBLE rand(INT seed) 返回一个DOUBLE型随机数,seed是随机因子
DOUBLE power(DOUBLE a, DOUBLE p) 计算a的p次幂
DOUBLE sqrt 开根号
DOUBLE abs 绝对值
int pmod 取模
BIGINT floor(DOUBLE a) 向下取整,如:6.10->6 -3.4->-4

日期函数

返回值 函数 描述
date current_date 返回当前时间的日期
string from_unixtime(bigint unixtime[, string format]) 将时间戳转换成format格式
int unix_timestamp() 获取本地时区下的时间戳
bigint unix_timestamp(string date) 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳
string to_date(string timestamp) 返回时间字符串的日期部分
int year(string date)month/day/hour/minute/second/weekofyear 返回时间字符串的年份部分返回月/天/时/分/秒/第几周
int datediff(string enddate, string startdate) 计算开始时间到结束时间相差的天数
string date_add(string startdate, int days) 从开始时间startdate加上days
string date_sub(string startdate, int days) 从开始时间startdate减去days
timestamp current_timestamp 返回当前时间戳
string date_format(date/timestamp/string ts, string fmt) 按指定格式返回时间date 如:date_format(“2016-06-22”,“MM-dd”)=06-22

集合函数

返回值 函数 描述
int size(Map) 返回map中键值对个数
array map_keys(Map) 返回map中的所有key
array map_values(Map) 返回map中的所有value

条件函数

返回值 函数 描述
T if(boolean testCondition, T valueTrue, T valueFalseOrNull) 如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNull
T nvl(T value, T default_value) value为NULL返回default_value,否则返回value,相当于mysql中的ifnull
T COALESCE(T v1, T v2, …) 返回第一非null的值,如果全部都为NULL就返回NULL
T CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END 如果a=b就返回c,a=d就返回e,否则返回f
T CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END 如果a=ture就返回b,c= ture就返回d,否则返回e
boolean isnull( a ) 如果a为null就返回true,否则返回false
boolean isnotnull ( a ) 如果a为非null就返回true,否则返回false

聚合函数

聚合函数是hive内置函数,聚合函数对一组值执行计算,并返回单个值。 在Hive的聚合中,如果某个聚合列的值中有null,则包含该null的行将在聚合时被忽略除,了 COUNT 函数以外。为了避免这种情况,可以使用COALESCE来将null替换为一个默认值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。换句话说使用聚合函数时,一个列字段要不在group by里,要不必须在聚合函数里面,否则报错。

返回值 函数 描述
BIGINT count(*),count(expr),count(DISTINCT expr[, expr_.]) count(*) – 返回检索到的行的总数,包括含有NULL值的行。count(expr) – 返回expr表达式不是NULL的行的数量count(DISTINCT expr[, expr]) – 返回expr是唯一的且非NULL的行的数量
DOUBLE sum(col),sum(DISTINCT col) 对组内某列求和(包含重复值)或者对组内某列求和(不包含重复值)
DOUBLE avg(col),avg(DISTINCT col) 对组内某列元素求平均值者(包含重复值或不包含重复值)
DOUBLE min(col) 返回组内某列的最小值
DOUBLE max(col) 返回组内某列的最大值

表生成函数:输出可以作为表使用

返回值 函数 描述
N rows explode(array) 对于array中的每个元素生成一行且包含该元素
N rows explode(MAP) 每行对应每个map键值对,其中一个字段是map的键,另一个字段是map的值
N rows posexplode(ARRAY) 与explode类似,不同的是还返回各元素在数组中的位置
N rows stack(INT n, v_1, v_2, …, v_k) 把k列转换成n行,每行有k/n个字段,其中n必须是常数
tuple json_tuple(jsonStr, k1, k2, …) 从一个JSON字符串中获取多个键并作为一个元组返回,与get_json_object不同的是此函数能一次获取多个键值

你可能感兴趣的:(hive之内置函数(常用函数))