5 Function
指数据库内置的function,不讨论UDF。另外,操作符都不比较了,区别不大。
5.1 数学函数
功能
|
Oracle
|
Hive
|
Impala
|
ABS
|
绝对值,有
|
有
|
有
|
SIN/SINH/ASIN/COS/COSH/ACOS/TAN/TANH/ATAN/ATAN2
|
三角函数
其中ATAN2接受两个参数(二维平面中的坐标)
|
没有SINH/COSH/TANH/ATAN2
|
同hive
|
BITAND
|
按位与,有
|
|
|
CEIL
|
天花板值,有
|
有,还有个别名CEILING
|
有,同hive
|
EXP
|
e的多少次,有
|
有,还有个函数E()返回e
|
有,同hive
|
FLOOR
|
地板值,有
|
有
|
有
|
LN
|
以e为底的log,有
|
有
|
有
|
LOG
|
以某个double为底的log,有
|
有,还有两个特殊底的log:LOG2和LOG10
|
有,同hive
|
MOD
|
Oracle的MOD的计算方式为MOD(n2,n1)=n2 - n1 * FLOOR(n2/n1),这与经典取模还不同,比如Oracle的MOD(-11,4)=-3,但经典取模等于1
|
在hive里取模用PMOD,返回值一定是个正数,比如PMOD(-11,4)=1。但这与经典取模还是不同,比如PMOD(-11,-4)=1,但经典取模等于-3
|
Impala的PMOD和hive的PMOD相同,另外Impala还有个FMOD和Oracle的MOD相同
|
POWER
|
求幂,有
|
有,还有个别名POW
|
有,同hive
|
REMAINDER
|
取余,REMAINDER(n2,n1)=n2 - n1 * FLOOR(n2/n1)
|
|
|
ROUND
|
舍入,支持1个参数和2个参数两种版本
|
有
另外还有一个BROUND,使用HALF_EVEN舍入模式,见官方手册
|
有,同Oracle
|
SIGN
|
符号函数,有
|
有
|
有
|
SQRT
|
开方,有
|
有
|
有
|
TRUNC
|
截取数值的小数点后多少位(如果是负值则往前推)
|
|
|
DEGREES/RADIANS
|
|
角度/弧度互转
|
同hive
|
POSITIVE/NEGATIVE
|
|
相当于在数值前加+/-号(因此没什么卵用)
|
同hive
|
PI
|
|
返回pi值
|
同hive
|
FACTORIAL
|
|
阶乘,1.2.0以后才有
|
|
CBRT
|
|
求立方根,1.2.0以后才有
|
|
SHIFTLEFT/SHIFTRIGHT/SHIFTRIGHTUNSIGNED
|
|
按位左移/右移/无符号右移
|
|
GREATEST/LEAST
|
返回一串值中的最大/最小值,这串值的类型可以是任意,只要可比较大小(所以其实不是数学函数而是通用比较)
|
有,1.1.0以后
|
有
|
5.2 字符(串)函数
功能
|
Oracle
|
Hive
|
Impala
|
ASCII
|
输入必须char,返回该字符的ascii数值
|
输入String,返回该String第一个字符的ascii数值
|
同hive
|
BASE64 / UNBASE64
|
|
将二进制值转为base64的String(UN则是反向)
|
|
CONCAT
|
CONCAT(char1, char2)
char或char2均可为CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB, or NCLOB之一
|
concat(string|binary A, string|binary B...)
可以有多个参数
另外提供CONCAT_WS用于指定特殊分隔符的连接
|
同hive(除了不支持binary类型),且也有CONCAT_WS
|
DECODE/ENCODE
|
|
string decode(binary bin, string charset)
binary encode(string src, string charset)
编码和解码用的,用于支持hive特有的binary类型
|
(其实oracle和impala也有DECODE,但作用完全不同,见条件函数中的DECODE)
|
FIND_IN_SET
|
|
find_in_set(string str, string strList)
strList是用’,’分割的一组string,该函数将寻找strList中第一个精确匹配的str
|
同hive
|
FORMAT_NUMBER
|
|
将数字格式化为string
|
|
GET_JSON_OBJECT
|
|
抽取JSON对象,不常用
|
|
IN_FILE
|
|
in_file(string str, string filename)
检测str是否为filename对应文件中的某行,不常用
|
|
INITCAP
|
将每个单词(以空白分隔)转换为首字母大写其余小写的形式
|
同oracle,1.1.0开始有
|
同oracle
|
INSTR
|
{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])
搜索子串,不同数据类型调用名不同,最多可带四个参数,其中第三个是开始位置,第四个是出现的第几次
|
instr(string str, string substr)
只接受两个参数
|
同hive
|
LENGTH
|
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
串长,不同数据类型调用名不同
|
有(仅LENGTH)
|
同hive
|
LEVENSHTEIN
|
|