因为一部分是写给公司同事看的,会适当阉割。
分为五部分介绍,以表格形式对比。各软件默认版本如下:Oracle 11g, Hive 0.13.0, Impala 2.1.0,如有例外会指出。空白说明没有这种类型或功能。
Cloudera官方文档有一篇文章阐述了Impala和Hive的差异(http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_langref_unsupported.html),不过描述得比较简略,详细的对照本文会给出。Oracle和Hive的对照则基本没看到过,本文也尝试给出。
1 Data Type
1.1 字符类型
类型
|
Oracle
|
Hive
|
Impala
|
CHAR(n)
|
n默认1字节,最大为2000,n可省略
|
最大255
|
同hive
|
NCHAR(n)
|
n默认1字节,最大为2000,n可省略,存Unicode
|
|
|
NVARCHAR2(n)
|
n不可省略,最大4000,存Unicode
|
|
|
VARCHAR2(n)
|
n不可省略,最大4000
|
|
|
VARCHAR(n)
|
同VARCHAR2,不建议使用
|
最大65535
|
同hive
|
STRING
|
|
‘’或“”括住,文档中未说明最大长度,怀疑和Java的String相同,即2G个字符数,占4G字节(未测过)
|
‘’或“”括住,最大32767字节
|
1.2 数字类型
类型
|
Oracle
|
Hive
|
Impala
|
NUMBER(p[,s])
|
1-22字节,p取值范围1到38,s取值范围-84到127
存储定点数,值的绝对值范围为1.0 x 10e-130至1.0 x 10e126。值大于等于1.0 x 10e126时报错。p为有意义的10进制位数,正值s为小数位数,负值s表示四舍五入到小数点左部多少位。
|
|
|
BINARY_FLOAT
|
5字节,其中有一长度字节。
32位单精度浮点数类型。
符号位1位,指数位8位,尾数位23位。
|
|
|
BINARY_DOUBLE
|
9字节,其中有一长度字节。
64位双精度浮点数类型。
|
|
|
DECIMAL(p[,s])
|
只在语法上支持,底层实际就是NUMBER,无任何区别
|
最大38位精度
0.11引入时固定38位
0.13开始允许自定义p和s
|
最大38位精度
|
TINYINT
|
|
1-byte signed integer, from -128 to 127
|
同hive
|
SMALLINT
|
|
2-byte signed integer, from -32,768 to 32,767
|
同hive
|
INT
|