在学习hive过程中,熟练使用hive内置函数,可以节省大量时间,在学习之余,将函数基本使用总结汇总一下,方便后续使用查阅,混个脸熟,内置函数271个,结合源码,需要持续学习更新

分享一个全面的函数大全这里

数学函数

返回类型

函数名称

描述

double

round(double a)

当输入参数仅有一个时,返回四舍五入的整数, 输入类型可以是数字,字符串: eg:

round(2)->2; round(-5)->-5;

round(2.4)->2;round(2.5)->3;round(-2.4)->-2; round(-2.5)->-3

round('2.4')->2;round('2.5')->3;round('2.4s')->null, 当字符串可以转换为数字,按照数字处理

double

round(double a,int b)

 返回制定位数的数字,当输入为整形时,指定的位数无效:eg

round(2,2)->2;round(2.1,2)->2.10;round(2.566,2)->2.57:

可以转换为数字的字符串同样适用:round('2.5666',2)->2.57

double

bround(double a)

银行家舍入法(1~4:舍,6~9:进,5->前位数是偶:舍,5->前位数是奇:进)其他与一致

bround(2.5) = 2, bround(3.5) = 4

double

bround(DOUBLE a, INT d)

采用银行家舍入法保留小数位数

bigint

floor(double a)

 向下取整,小于a的最大整数

floor(2.1)=floor(2.9)=2

floor(-2.1)=floor(-2.9)=-3

可以转换为数字的字符串同样适用

bigint

ceil(double a)

ceiling(double a)

 向上取整


ceil(2.1)=ceil(2.9)=3

ceiling(-2.1)=ceiling(-2.9)=-2

可以转换为数字的字符串同样适用

6个


double

rand(),rand(int seed)

 产生[0,1)的随机数,可以指定随机因子seed

rand()->0.432234324

double

exp(double a),exp(decimal a)

 返回e的指定a的幂次方,a可以是小数

exp(0)=1;exp(1)=2.71828

double

ln(double a)

 以e为底,a的对数

double

log10(double a)

 以10为底,a的对数

double

log2(double a)

 以2为底,a的对数

double

log(double a,double b)

 以a为底,b的对数;log(2,4)=2.0

double

pow(double a,double b),

 power(double a,double b)

a 的b次方 pow('2.2',3)=10.648

double

sqrt(double a)

a的平方根 sqrt(4)=2.0;

string

bin( bigint a)

 返回a的二进制表示,a需要为整型,否则报错

string

hex(bigint a),hex(string a),hex(binary a)

a的16进制表示,a可以为整形,字符串(字符串对应的16进制)

10个

binary

unhex(string a)

 将16进制a转换为对应的二进制

string

conv(bigint num, int a,int b)

conv(string num, int a, int b)

 将num从进制a转换为进制b

eg;conv(5,10,2)=101,conv('101',2,10)=5

double

abs(double a)

a的绝对值

int or double

mod(int a, int b)/mod(double a,double b)

pmod(int a,intb)/pmod(double a, double b)

a对b求余数(取模)

double

sin(double a)

asin(double a)

a的正弦

a的反正弦

double

cos(double a)

acos(double a)

a的余弦

a的反余弦

double

tan(double a)

atan(double a)

a的正切

a的反正切

double

degrees(double a)

 将弧度值转换为角度值degrees(3.14)=179.9

double

radians(double a)

 将角度值转换为弧度值radians(180)=3.141

int double

positive(double a)

 输入a,返回a.(不知道有什么意义)

10

int or double

negative(int a)negative (double a)

 返回a的相反数

int or double

sign(double a)

 如果a是大于0返回1,小于0返回-1,0则返回0

double

e()

 返回自然数2.71828

double

pi()

 返回pi,3.1415

double

factorial(int a)

a的阶乘

double

cbrt(double a)

a的立方

int 

shiftleft(a,b);

shiftright;(a,b)

shiftrightundigned(a,b)

按位左移

按位右移

无符号右移

T

greatest(T v1, T v2,...)

 求最大值greatest(2,3,5)=5

T

least(T v1,T v2....)

 求最小值least(3,5,4)=3

 

 

 

9

集合函数

 返回类型

 函数名称

 描述

 

array(v1,v2,....)

 指定数组array(1,2,3)=[1,2,3]

底层实现是arraylist,如果是数字和字符串组合,默认转换为string类型

 

map(key1,v1,key2,v2...)

 指定map  map(1,'a',2,'b',3,'c')={1:"a",2:"b",3:"c"}

底层实现是linkedhashmap

int

size(map<k,v>)

size(array<T>)

 返回map或者array的大小

array<K>

map_keys(map<K,V>)

 返回map的key值集合

array<V>

map_values(map<K,V>))

 返回map的value值集合

Boolean

array_contains(array<T>,value)

 判读数组中是否含有值value,结果为true或者false

select array_contains(array(3,5,7,'a'),'3');=true

array

sort_array(array<T>)

 按照自然升序排列数组

 select sort_array(array(3,5,7,'a'))--> ["3","5","7","a"]

 

 

 

类型转换函数

binary

binary(string)

将输入的值转换成二进制

 

cast

将expr转换成type类型 如:cast("1" as BIGINT) 将字符串1转换成了BIGINT类型,如果转换失败将返回NULL

 

 

 

日期函数

类型

名称

描述

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()

获取本地时区下的时间戳

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

条件函数

类型

 名称

 描述

T

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

类似三元表达式

if(3>2,'a','b');a

T

nvl(T value, T default_value)

如果value为空,返回默认值default——value,否则返回value

T

COALESCE(T v1, T v2, ...)

返回第一非null的值,如果全部都为NULL就返回NULL  如:COALESCE (NULL,44,55)=44

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

then可以多个连用

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

字符函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


聚合函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

表生成函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享几个内置函数大全连接:本文持续更新: