Hive 数据类型、特点和转换

基本类型

基本数据类型

类型

描述

示例

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。

KAMI
KAMI
数据挖掘研究员,专注分享数据领域的技术和业务,以及逻辑、思维和方法论

发表回复

文章结构
相关文章