基本类型
基本数据类型 | ||
类型 | 描述 | 示例 |
TINYINT | 1个字节(8位)有符号整数 | 1 |
SMALLINT | 2个字节(16位)有符号整数 | 1 |
INT | 4个字节(32位)有符号整数 | 1 |
BIGINT | 8个字节(64位)有符号整数 | 1 |
FLOAT | 4个字节(32位)单精度浮点数 | 1.0 |
DOUBLE | 8个字节(64位)单精度浮点数 | 1.0 |
BOOLEAN | true/false | true |
STRING | 字符串 | “abc” |
复杂类型
复杂数据类型 | ||
类型 | 描述 | 示例 |
ARRAY | 一组有序元素,所有元素类型必须相同 | Array(1,2) |
MAP | 一组无序键值对;键必须为基本类型,所有键类型必须相同;值可为任意类型,但所有值类型必须相同 | Map(‘a’,1,’b’,1) |
STRUCT | 一组有命名的值的集合,值的类型可不相同 | struct(‘a’,1,2) |
类型特点
1. Hive 不支持日期类型。在使用上一般用字符串来表示的日期,而常用的日期格式转化操作则是通过自定义函数进行操作。
2. 除了STRING类型,Hive 里的基本数据类型和Java的基本数据类型一一对应。
3. STRING类型对应 Java 里的 String 类,类似数据库的varchar类型,不过它不能声明其长度,理论上它可以存储2GB的字符数。
4. Hive 有三种复杂数据类型: ARRAY、MAP 和 STRUCT,分别 Java的 Array 、Map 和 Object,允许任意层次的嵌套。复杂数据类型的声明必须使用尖括号指明其中字段类型:
CREATE
TABLE complex(
col1 ARRAY< INT>,
col2 MAP< STRING,INT>,
col3 STRUCT< a:STRING,b:INT,c:DOUBLE>
);
类型转换
Hive 的基本数据类型可以进行隐式转换,类似于 Java 的类型转换,规则如下:
1. 任何整数类型都可以隐式地转换为一个范围更广的类型。
2. 所有整数类型、FLOAT 和 STRING类型都可以隐式转换为 DOUBLE。
3. TINYINT、SMALLINT、INT 都可以式以隐式转换为 FLOAT。
4. BOOLEAN 类型不可以以隐式转换为任何其它的类型。
当隐式转换的条件不满足时,例如表达式使用 TINYINT 但数据为 INT,语句会报错。
使用 CAST 语句可以进行显式类型转换,例如 CAST(‘1′ AS INT) 将把字符串’1’ 转换成整数 1;如果强制类型转换失败,如执行 CAST(‘X’ AS INT),表达式返回空值 NULL。