Hive内置数据类型
Hive 的内置数据类型可以分为两大类,分别是基础数据类型和复杂数据类型。接下来,我们通过两张表来列举,具体如表1和表2所示。
表1 Hive基本数据类型
数据类型 | 描述 |
---|---|
TINYINT | 1字节的有符号整数,从-128至127 |
SMALLINT | 2字节有符号整数,从-32768至32767 |
INT | 4字节有符号整数,从从-231到231-1 |
BIGINT | 8字节有符号整数,从从-263到263-1 |
FLOAT | 4字节单精度浮点数 |
DOUBLE | 8字节双精度浮点数 |
DOUBLE PRECISION | Double的别名,从Hive2.2.0开始提供 |
DECIMAL | 任意精度的带符号小数 |
NUMERIC | 同样是DECIMAL,从Hive3.0开始 |
TIMESTAMP | 精度到纳秒的时间戳 |
DATE | 以年/月/日形式描述的日期 |
INTERVAL | 表示时间间隔 |
STRING | 字符串 |
VARCHAR | 同STRING,字符串长度不固定 |
CHAR | 固定长度的字符串 |
BOOLEAN | 用于存储真值(TRUE)和假值(FALSE) |
BINARY | 字节数组 |
表2 Hive复杂数据类型
数据类型 | 描述 |
---|---|
ARRAY | 一组有序字段,字段类型必须相同 |
MAP | 一组无序键值对。键的类型必须是原子类型,值可以是任意类型,同一个映射的键的类型必须相同,值的类型也必须相同 |
STRUCT | 一组命名的字段,字段的类型可以不同 |
表1罗列的Hive基本数据类型多数对应的是Java中的类型,其中:
(1)TINYINT、SMALLINT、INT以及BIGINT,分别等价于Java中的byte、short、int和long数据类型,它们分别表示的是1字节、2字节、4字节和8字节的有符号整数。
(2)FLOAT和DOUBLE对应的是Java中的float和double类型,分别为32位和64位浮点数。
(3)STRING用于存储文本,并且理论上最多可以存储2GB的字符数。
(4)BINARY用于存储变长的二进制数据。
表2罗列的Hive的复杂数据类型中,ARRAY和MAP这两种数据类型与Java中的同名数据类型类似,而STRUCT是一种记录类型,它封装了一个命令的字段集合。复杂数据类型允许任意层次的嵌套,其声明方式必须使用尖括号指明其中数据字段的类型,示例代码如下:
CREAT TABLE complex(
col1 ARRAY<int>,
col2 Map<INT,STRING>,
col3 STRUCT<a:STRING,b:INT,c:DOUBLE>
)