Hive 数据类型

Hive 提供了基本数据类型和复杂数据类型,复杂数据类型是 Java 语言所不具有的。

 Hive 的两种数据类型以及数据类型之间的转换。

Hive 数据类型

(一)基本数据类型

Hive 数据类型

由上表我们看到hive不支持日期类型,在hive里日期都是用字符串来表示的,而常用的日期格式转化操作则是通过自定义函数进行操作。

hive是用java开发的,hive里的基本数据类型和java的基本数据类型也是一一对应的,

除了string类型。有符号的整数类型:TINYINT、SMALLINT、INT和BIGINT分别等价于java

的byte、short、int和long原子类型,它们分别为1字节、2字节、4字节和8字节有符号整

数。Hive的浮点数据类型FLOAT和DOUBLE,对应于java的基本类型float和double类型。而hive的BOOLEAN类型相当于java的基本数据类型boolean。

对于hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

(二)复杂数据类型

Hive 数据类型

Hive 有三种复杂数据类型 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 与 Java 中的

Array 和 Map 类似,而STRUCT 与 C语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

复杂数据类型的声明必须使用尖括号指明其中数据字段的类型。定义三列,每列对应一种复杂的数据类型,如下所示。

CREATE TABLE complex( col1 ARRAY< INT>,

col2 MAP< STRING,INT>,

col3 STRUCT< a:STRING,b:INT,c:DOUBLE>

)

(三)类型转化

Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换,例如某表达式使用 INT 类型,TINYINT 会自动转换为INT 类型,但是 Hive 不会进行反向转化,例如,某表达式使用 TINYINT 类型,INT 不会自动转换为 TINYINT 类型,它会返回错误,除非使用 CAST 操作。

(1)隐式类型转换规则如下。

1)、任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成

INT,INT 可以转换成 BIGINT。

2)、所有整数类型、FLOAT 和 String 类型都可以隐式地转换成 DOUBLE。

3)、TINYINT、SMALLINT、INT 都可以转换为 FLOAT。

4)、BOOLEAN 类型不可以转换为任何其它的类型。

(2)可以使用 CAST 操作显示进行数据类型转换,例如 CAST('1' AS INT) 将把字符串'1' 转换成整数 1;如果强制类型转换失败,如执行 CAST('X' AS INT),表达式返回空值NULL。