一、Hive函数分类
1)从输入输出角度分类
- 标准函数:一行数据中的一列或多列为输入,结果为单一值
- 聚合函数:多行的零列到多列为输入,结果为单一值
- 表生成函数:零个或多个输入,结果为多列或多行
2)从实现方式分类 - 内置函数
- 自定义函数
1.UDF:自定义标准函数
2.UDAF:自定义聚合函数
3.UDTF:自定义表生成函数
二、内置函数
Hive提供大量内置函数供开发者使用
1)标准函数
- 字符函数
- 类型转换函数
- 数学函数
- 日期函数
- 集合函数
- 条件函数
2)聚合函数
3)表生成函数int
一、字符函数
返回值 | 函数 | 描述 |
---|---|---|
string | concat(string a,string b…) | 对二进制字节码或字节符按次序进行拼接 |
int | instr(string str,string substr) | 查找字符串str中字符串substr出现的位置 |
int | length(string A) | 返回字符串的长度 |
int | locate(string substr, string str[, int pos]) | 查找字符串str中的pos位置后字符串substr第一次出现的位置 |
string | lower(string A) /upper(string A) | 将字符串A的所有字母转换成小写/大写字母 |
string | regexp_replace(string INITIAL_STRING,string PATTERN, string REPLACEMENT) | 按正则表达式PATTERN将字符串中符合条件的部分替换成REPLACEMENT所指定的字符串 |
array | split(string str, string pat) | 按照正则表达式pat来分割字符串str |
string | substr(string | binary A, int start, int len)substring(string |
string | trim(string A) | 将字符串A前后出现的空格去掉 |
map | str_to_map(text[, delimiter1, delimiter2]) | 将字符串str按照指定分隔符转换成Map |
binary | encode(string src, string charset) |
二、类型转换函数和数学函数
返回值 | 类型转换函数 | 描述 |
---|---|---|
“typr” | cast(expr as ) | 将expr转换成type类型 如:cast(“1” as BIGINT) 将字符串1转换成了BIGINT类型 |
binary | binary(string | binary) |
返回值 | 数学函数 | 描述 |
---|---|---|
DOUBLE | round(DOUBLE a) | 返回对a四舍五入的BIGINT值 |
binary | round(DOUBLE a, INT d) | 返回对a四舍五入并保留d位小数位的值 |
BIGINT | floor(DOUBLE a) | 向下取整,如:6.10->6 -3.4->-4 |
DOUBLE | rand(INT seed) | 返回一个DOUBLE型随机数,seed是随机因子 |
DOUBLE | power(DOUBLE a, DOUBLE p) | 计算a的p次幂 |
DOUBLE | abs(DOUBLE a) | 计算a的绝对值 |
三、日期函数(比较重要的函数)
返回值 | 函数 | 描述 |
---|---|---|
string | from_unixtime(bigint unixtime[, string format]) | 将时间戳转换成format格式 |
int | unix_timestamp() | 获取本地时区下的时间戳 |
bigint | unix_timestamp(string date) | 将格式为yyyy-MM的时间字符串转换成时间戳 |
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 |
date | current_date | 返回当前时间的日期 |
timestamp | current_timestamp | 返回当前时间戳 |
string | date_format(date/timestamp/string ts, string fmt) | 按指定格式返回时间date 如:date_format(“2016-06-22”,“MM-dd”)=06-22 |
注意:时间戳返回的是秒,计算相差的小时的话应该两日期相减除以3600!
四、集合函数
返回值 | 函数 | 描述 |
---|---|---|
int | size(Map<K.V>) | 返回map中键值对个数 |
int | size(Array) | 返回数组的长度 |
array | (Map<K.V>) | 返回map中的所有key |
array | map_values(Map<K.V>) | 返回map中的所有value |
boolean | array_contains(Array, value) | 如该数组Array包含value返回true。,否则 |
返回false | ||
array | sort_array(Array) | 对数组进行排序 |
五、条件函数
返回值 | 函数 | 描述 |
---|---|---|
T | if(boolean testCondition, T valueTrue, TvalueFalseOrNull) | 如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNull |
T | nvl(T value, T default_value) | value为NULL返回default_value,否则返回value |
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 |
六。聚合函数和表生成函数
扫描二维码关注公众号,回复:
11446346 查看本文章
-
聚合函数
count、sum、max、min、avg、var_samp等 -
表生成函数:输出可以作为表使用
返回值 | 函数 | 描述 |
---|---|---|
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不同的是此函数能一次获取多个键值 |