由于需要使用hive sql进行数据查询,同时涉及多个不同类型的字段的组合,看Hive sql的文档相关和资料才知道,hive是支持大部分基础数据类型之间的相互转换的。
那么,hive本身支持哪些数据类型呢?
从hive内置数据类型中,Hive支持的数据类型包括以下这些:
数据类型 | 所占字节 | 开始支持版本 | |
TINYINT | 1byte,-128 ~ 127 |
| |
SMALLINT | 2byte,-32,768 ~ 32,767 |
| |
INT | 4byte,-2,147,483,648 ~ 2,147,483,647 |
| |
BIGINT | 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| |
BOOLEAN |
|
| |
FLOAT | 4byte单精度 |
| |
DOUBLE | 8byte双精度 |
| |
STRING |
|
| |
BINARY |
| 从Hive0.8.0开始支持 | |
TIMESTAMP |
| 从Hive0.8.0开始支持 | |
DECIMAL |
| 从Hive0.11.0开始支持 | |
CHAR |
| 从Hive0.13.0开始支持 | |
VARCHAR |
| 从Hive0.12.0开始支持 | |
DATE |
| 从Hive0.12.0开始支持 |
以及一些数据数据类型:包括array数组,map键值对,struct结构体,union联合等。
可以看到,hive对平时用到的数据类型都有所支持。
其中部分基础数据类型支持隐式转换,意味着在使用过程中可以直接把源类型作为目标类型来使用,支持数据类型隐式的类型包括:
| boolean | tinyint | smallint | int | bigint | float | double | decimal | string | varchar | timestamp | date | binary |
boolean | true | false | false | false | false | false | false | false | false | false | false | false | false |
tinyint | false | true | true | true | true | true | true | true | true | true | false | false | false |
smallint | false | false | true | true | true | true | true | true | true | true | false | false | false |
int | false | false | false | true | true | true | true | true | true | true | false | false | false |
bigint | false | false | false | false | true | true | true | true | true | true | false | false | false |
float | false | false | false | false | false | true | true | true | true | true | false | false | false |
double | false | false | false | false | false | false | true | true | true | true | false | false | false |
decimal | false | false | false | false | false | false | false | true | true | true | false | false | false |
string | false | false | false | false | false | false | true | true | true | true | false | false | false |
varchar | false | false | false | false | false | false | true | true | true | true | false | false | false |
timestamp | false | false | false | false | false | false | false | false | true | true | true | false | false |
date | false | false | false | false | false | false | false | false | true | true | false | true | false |
binary | false | false | false | false | false | false | false | false | false | false | false | false | true |
如果hive不支持该类型的转换,在使用CAST进行转换时,就会报错:
如将bigint转换为binary
CAST((9223372036854775807-unix_timestamp()) as binary)
过往记忆总结的很好,上面的内容也多半出自此处,并进行了一定的加工汇总。