2.5 Hive类型系统
hive支持基本数据类型和复杂数据类型。
一、基本数据类型(Primitive Types)
hive表中的每一列都关联着一个数据类型。以下是Hive中支持的基本数据类型:
整数
TINYINT 1字节整数
SMALLINT 2字节整数
INT 4字节整数
BIGINT 8字节整数
布尔类型
BOOLEAN - TRUE/FALSE
浮点数
FLOAT 单精度
DOUBLE 双精度
字符串类型
STRING
这些数据类型按照以下的层级结构进行组织(父类型是所有子类型实例的超类)
类型等级定义了在查询时类型如何隐式的进行转换。在Hive中,支持从子类型到祖先类型的隐式转换(Implicit conversion
)。
这种类型的分层定义了在查询时类型如何隐式的进行转换。隐式转换(Implicit conversion)是允许从子类型的祖先。因此,当一个查询表达式期望的是type1类型,而数据实际上是type2类型,type2型隐式转换为type1(如果type1是type2的类型层次的祖先)。请注意,类型层次结构允许字符串隐式转换为DOUBLE。
显式类型转换(Explicit type conversion
)可以通过强转操作符(cast operator)完成。
复杂数据类型
复合类型类型(Complex Types)
复合类型可以从原始类型以及其他复合类型的基础上建立起来:
Structs:这个类型中的元素可以通过"."来访问。例如有一个列c的类型为STRUCT {a INT; b INT},则a可以通过"c.a"的方式进行访问
Maps(键值对) :其内部元素可以通过 ['element name'] 的方式进行访问。例如有一个Map M,其包含一个映射"group"->gid,则gid可以通过M['group']这种方式来访问。
Arrays (有序列表):数组中的元素必须是同一种类型。数组中的元素可以通过下标来访问,下标从0开始。例如对于一个数组A,其元素值为 ['a', 'b', 'c'],那么 A[1]返回'b'。
复杂数据类型通过基本数据类型和构造方法来创建。例如一个User类型可能含有以下两个字段:
gender - which is a STRING.
active - which is a BOOLEAN.