02 Hive支持的数据类型( Data Type)
Hive支持简单、复杂两大类数据类型,
简单类型
Hive 简单数据类型 | Java 数据类型 | 长度 | 例子 |
---|---|---|---|
TINYINT | byte | 1byte 有符号整数 | 20 |
SMALINT | short | 2byte 有符号整数 | 20 |
INT | int | 4byte 有符号整数 | 20 |
BIGINT | long | 8byte 有符号整数 | 20 |
BOOLEAN | boolean | 布尔类型,true 或者 false | TRUE FALSE |
FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | string | 字符系列。可以指定字 符集。可以使用单引号或者双 引号。 | ‘ now is the time ’ “for all good men” |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
类型转换
简单类型按以下层次结构组织(父实例是所有子实例的超类型)
- Primitive Type
- Number
- DOUBLE
- FLOAT
- BIGINT
- INT
- SMALLINT
- TINYINT
- SMALLINT
- INT
- BIGINT
- STRING
- FLOAT
- DOUBLE
- BOOLEAN
- Number
这种类型层次结构定义了如何在查询语言中隐式地转换类型。类似于Java的类型转换,允许从子类型到祖先类型的隐式转换。因此,当查询表达式期望类型1且数据为类型2时,如果类型1是类型层次结构中类型2的祖先,则类型2将隐式转换为类型1。请注意,类型层次结构允许隐式地将STRING转换为DOUBLE。不同于Java的是,Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作。
例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。
复杂类型
Hive复杂数据类型 | 描述 | 语法示例 |
---|---|---|
STRUCT | 和 c 语言中的 struct 类似,都可以通过“点”符号访 问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING, last STRING},那么第 1 个元素可以通过字段.first 来 引用。 | struct() 例 如 struct<street:string, city:string> |
MAP | MAP 是一组键-值对元组集合,使用数组表示法可以 访问数据。例如,如果某个列的数据类型是 MAP,其中键 ->值对是’first’->’John’和’last’->’Doe’,那么可以 通过字段名[‘last’]获取最后一个元素 | map() 例如 map<string, int> |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些 变量称为数组的元素,每个数组元素都有一个编号,编号从 零开始。例如,数组值为[‘John’, ‘Doe’],那么第 2 个 元素可以通过数组名[1]进行引用。 | Array() 例如 array |