Hive2.0常用函数(对编辑器很无语😓)
Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函数,表生成函数等等,这些函数都统称为内置函数。
类型转换函数
Return Type
|
Name(Signature)
|
Description
|
binary
|
binary(string|binary)
|
将输入的值转换成二进制
|
Expected "=" to follow "type"
|
cast(expr as <type>)
|
将expr转换成type类型 如:cast("1" as BIGINT) 将字符串1转换成了BIGINT类型,如果转换失败将返回NULL
|
日期函数
Return Type
|
Name(Signature)
|
Description
|
string
|
from_unixtime(bigint unixtime[,
string format])
|
将时间的秒值转换成format格式(format可为“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh”,“yyyy-MM-dd hh:mm”等等)如from_unixtime(1250111000,"yyyy-MM-dd") 得到2009-03-12
|
bigint
|
unix_timestamp()
|
获取本地时区下的时间戳
|
bigint
|
unix_timestamp(string date)
|
将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳 如unix_timestamp('2009-03-20 11:30:01') = 1237573801
|
bigint
|
unix_timestamp(string date,
string pattern)
|
将指定时间字符串格式字符串转换成Unix时间戳,如果格式不对返回0 如:unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400
|
string
|
to_date(string timestamp)
|
返回时间字符串的日期部分
|
int
|
year(string date)
|
返回时间字符串的年份部分
|
int
|
quarter(date/timestamp/string)
|
返回当前时间属性哪个季度 如quarter('2015-04-08') = 2
|
int
|
month(string date)
|
返回时间字符串的月份部分
|
int
|
day(string date) dayofmonth(date)
|
返回时间字符串的天
|
int
|
hour(string date)
|
返回时间字符串的小时
|
int
|
minute(string date)
|
返回时间字符串的分钟
|
int
|
second(string date)
|
返回时间字符串的秒
|
int
|
weekofyear(string date)
|
返回时间字符串位于一年中的第几个周内 如weekofyear("1970-11-01 00:00:00") = 44, weekofyear("1970-11-01") = 44
|
int
|
datediff(string enddate, string startdate)
|
计算开始时间startdate到结束时间enddate相差的天数
|
string
|
date_add(string startdate, int days)
|
从开始时间startdate加上days
|
string
|
date_sub(string startdate, int days)
|
从开始时间startdate减去days
|
timestamp
|
from_utc_timestamp(timestamp,
string timezone)
|
如果给定的时间戳并非UTC,则将其转化成指定的时区下时间戳
|
timestamp
|
to_utc_timestamp(timestamp,
string timezone)
|
如果给定的时间戳指定的时区下时间戳,则将其转化成UTC下的时间戳
|
date
|
current_date
|
返回当前时间日期
|
timestamp
|
current_timestamp
|
返回当前时间戳
|
string
|
add_months(string start_date,
int num_months)
|
返回当前时间下再增加num_months个月的日期
|
string
|
last_day(string date)
|
返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)
|
string
|
next_day(string start_date,
string day_of_week)
|
返回当前时间的下一个星期X所对应的日期 如:next_day('2015-01-14', 'TU') = 2015-01-20 以2015-01-14为开始时间,其下一个星期二所对应的日期为2015-01-20
|
string
|
trunc(string date, string format)
|
返回时间的最开始年份或月份 如trunc("2016-06-26",“MM”)=2016-06-01 trunc("2016-06-26",“YY”)=2016-01-01 注意所支持的格式为MONTH/MON/MM, YEAR/YYYY/YY
|
double
|
months_between(date1, date2)
|
返回date1与date2之间相差的月份,如date1>date2,则返回正,如果date1<date2,则返回负,否则返回0.0 如:months_between('1997-02-28 10:30:00', '1996-10-30') = 3.94959677 1997-02-28 10:30:00与1996-10-30相差3.94959677个月
|
string
|
date_format(date/timestamp/string ts,
string fmt)
|
按指定格式返回时间date 如:date_format("2016-06-22","MM-dd")=06-22
|
条件函数
Return Type
|
Name(Signature)
|
Description
|
T
|
if(boolean testCondition,
T valueTrue,
T valueFalseOrNull)
|
如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNull ,(valueTrue,valueFalseOrNull为泛型)
|
T
|
nvl(T value, T default_value)
|
如果value值为NULL就返回default_value,否则返回value
|
T
|
COALESCE(T v1, T v2, ...)
|
返回第一非null的值,如果全部都为NULL就返回NULL 如:COALESCE (NULL,44,55)=44/strong>
|
T
|
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
|
如果a=b就返回c,a=d就返回e,否则返回f 如CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END 将返回4
|
T
|
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
|
如果a=ture就返回b,c= ture就返回d,否则返回e 如:CASE WHEN 5>0 THEN 5 WHEN 4>0 THEN 4 ELSE 0 END 将返回5;CASE WHEN 5<0 THEN 5 WHEN 4<0 THEN 4 ELSE 0 END 将返回0
|
boolean
|
isnull( a )
|
如果a为null就返回true,否则返回false
|
boolean
|
isnotnull ( a )
|
如果a为非null就返回true,否则返回false
|
数学函数
Return Type
|
Name (Signature)
|
Description
|
DOUBLE
|
round(DOUBLE a)
|
返回对a四舍五入的BIGINT值
|
DOUBLE
|
round(DOUBLE a, INT d)
|
返回DOUBLE型d的保留n位小数的DOUBLW型的近似值
|
DOUBLE
|
bround(DOUBLE a)
|
银行家舍入法(1~4:舍,6~9:进,5->前位数是偶:舍,5->前位数是奇:进)
|
DOUBLE
|
bround(DOUBLE a, INT d)
|
银行家舍入法,保留d位小数
|
BIGINT
|
floor(DOUBLE a)
|
向下取整,最数轴上最接近要求的值的左边的值 如:6.10->6 -3.4->-4
|
BIGINT
|
ceil(DOUBLE a), ceiling(DOUBLE a)
|
求其不小于小给定实数的最小整数如:ceil(6) = ceil(6.1)= ceil(6.9) = 6
|
DOUBLE
|
rand(), rand(INT seed)
|
每行返回一个DOUBLE型随机数seed是随机因子
|
DOUBLE
|
exp(DOUBLE a), exp(DECIMAL a)
|
返回e的a幂次方, a可为小数
|
DOUBLE
|
ln(DOUBLE a), ln(DECIMAL a)
|
以自然数为底d的对数,a可为小数
|
DOUBLE
|
log10(DOUBLE a), log10(DECIMAL a)
|
以10为底d的对数,a可为小数
|
DOUBLE
|
log2(DOUBLE a), log2(DECIMAL a)
|
以2为底数d的对数,a可为小数
|
DOUBLE
|
log(DOUBLE base, DOUBLE a)
log(DECIMAL base, DECIMAL a)
|
以base为底的对数,base 与 a都是DOUBLE类型
|
DOUBLE
|
pow(DOUBLE a, DOUBLE p),
power(DOUBLE a, DOUBLE p)
|
计算a的p次幂
|
DOUBLE
|
sqrt(DOUBLE a), sqrt(DECIMAL a)
|
计算a的平方根
|
STRING
|
bin(BIGINT a)
|
计算二进制a的STRING类型,a为BIGINT类型
|
STRING
|
hex(BIGINT a)
hex(STRING a)
hex(BINARY a)
|
计算十六进制a的STRING类型,如果a为STRING类型就转换成字符相对应的十六进制
|
BINARY
|
unhex(STRING a)
|
hex的逆方法
|
STRING
|
conv(BIGINT num, INT from_base, INT to_base),
conv(STRING num, INT from_base, INT to_base)
|
将GIGINT/STRING类型的num从from_base进制转换成to_base进制
|
DOUBLE
|
abs(DOUBLE a)
|
计算a的绝对值
|
INT or DOUBLE
|
pmod(INT a, INT b),
|
a对b取模
|
DOUBLE
|
sin(DOUBLE a), sin(DECIMAL a)
|
求a的正弦值
|
DOUBLE
|
asin(DOUBLE a), asin(DECIMAL a)
|
求d的反正弦值
|
DOUBLE
|
cos(DOUBLE a), cos(DECIMAL a)
|
求余弦值
|
DOUBLE
|
acos(DOUBLE a), acos(DECIMAL a)
|
求反余弦值
|
DOUBLE
|
tan(DOUBLE a), tan(DECIMAL a)
|
求正切值
|
DOUBLE
|
atan(DOUBLE a), atan(DECIMAL a)
|
求反正切值
|
DOUBLE
|
degrees(DOUBLE a),
|
奖弧度值转换角度值
|
DOUBLE
|
radians(DOUBLE a), radians(DOUBLE a)
|
将角度值转换成弧度值
|
INT or DOUBLE
|
positive(INT a), positive(DOUBLE a)
|
返回a
|
INT or DOUBLE
|
negative(INT a), negative(DOUBLE a)
|
返回a的相反数
|
DOUBLE or INT
|
sign(DOUBLE a), sign(DECIMAL a)
|
如果a是正数则返回1.0,是负数则返回-1.0,否则返回0.0
|
DOUBLE
|
e()
|
数学常数e
|
DOUBLE
|
pi()
|
数学常数pi
|
BIGINT
|
factorial(INT a)
|
求a的阶乘
|
DOUBLE
|
cbrt(DOUBLE a)
|
求a的立方根
|
INT BIGINT
|
shiftleft(TINYINT|SMALLINT|INT a, INT b)
|
按位左移
|
shiftleft(BIGINT a, INT b)
|
||
INT
|
shiftright(TINYINT|SMALLINT|INT a, INTb)
|
按拉右移
|
BIGINT
|
shiftright(BIGINT a, INT b)
|
|
INT
|
shiftrightunsigned(TINYINT|SMALLINT|INTa,
INT b),
|
无符号按位右移(<<<)
|
BIGINT
|
shiftrightunsigned(BIGINT a, INT b)
|
|
T
|
greatest(T v1, T v2, ...)
|
求最大值
|
T
|
least(T v1, T v2, ...)
|
求最小值
|
集合函数
Return Type
|
Name(Signature)
|
Description
|
int
|
size(Map<K.V>)
|
求map的长度
|
int
|
size(Array<T>)
|
求数组的长度
|
array<K>
|
map_keys(Map<K.V>)
|
返回map中的所有key
|
array<V>
|
map_values(Map<K.V>)
|
返回map中的所有value
|
boolean
|
array_contains(Array<T>, value)
|
如该数组Array<T>包含value返回true。,否则返回false
|
array
|
sort_array(Array<T>)
|
按自然顺序对数组进行排序并返回
|
聚合函数
Return Type
|
Name(Signature)
|
Description
|
BIGINT
|
count(*)
|
统计总行数,包括含有NULL值的行
|
count(expr)
|
统计提供非NULL的expr表达式值的行数
|
|
count(DISTINCT expr[, expr...])
|
统计提供非NULL且去重后的expr表达式值的行数
|
|
DOUBLE
|
sum(col), sum(DISTINCT col)
|
sum(col),表示求指定列的和,sum(DISTINCT col)表示求去重后的列的和
|
DOUBLE
|
avg(col), avg(DISTINCT col)
|
avg(col),表示求指定列的平均值,avg(DISTINCT col)表示求去重后的列的平均值
|
DOUBLE
|
min(col)
|
求指定列的最小值
|
DOUBLE
|
max(col)
|
求指定列的最大值
|
DOUBLE
|
variance(col), var_pop(col)
|
求指定列数值的方差
|
DOUBLE
|
var_samp(col)
|
求指定列数值的样本方差
|
DOUBLE
|
stddev_pop(col)
|
求指定列数值的标准偏差
|
DOUBLE
|
stddev_samp(col)
|
求指定列数值的样本标准偏差
|
DOUBLE
|
covar_pop(col1, col2)
|
求指定列数值的协方差
|
DOUBLE
|
covar_samp(col1, col2)
|
求指定列数值的样本协方差
|
DOUBLE
|
corr(col1, col2)
|
返回两列数值的相关系数
|
DOUBLE
|
percentile(BIGINT col, p)
|
返回col的p%分位数
|
表生成函数
Return Type
|
Name(Signature)
|
Description
|
Array Type
|
explode(array<TYPE> a)
|
对于a中的每个元素,将生成一行且包含该元素
|
N rows
|
explode(ARRAY)
|
每行对应数组中的一个元素
|
N rows
|
explode(MAP)
|
每行对应每个map键-值,其中一个字段是map的键,另一个字段是map的值
|
N rows
|
posexplode(ARRAY)
|
与explode类似,不同的是还返回各元素在数组中的位置
|
N rows
|
stack(INT n, v_1, v_2, ..., v_k)
|
把M列转换成N行,每行有M/N个字段,其中n必须是个常数
|
tuple
|
json_tuple(jsonStr, k1, k2, ...)
|
从一个JSON字符串中获取多个键并作为一个元组返回,与get_json_object不同的是此函数能一次获取多个键值
|
tuple
|
parse_url_tuple(url, p1, p2, ...)
|
返回从URL中抽取指定N部分的内容,参数url是URL字符串,而参数p1,p2,....是要抽取的部分,这个参数包含HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY>
|
inline(ARRAY<STRUCT[,STRUCT]>)
|
将结构体数组提取出来并插入到表中
|