在学习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 |
字符函数
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
聚合函数
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
表生成函数
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
分享几个内置函数大全连接:本文持续更新: