2.5 Hive类型系统

2016-03-17 23:41:51 3,991 0

hive支持基本数据类型和复杂数据类型。

一、基本数据类型(Primitive Types)

hive表中的每一列都关联着一个数据类型。以下是Hive中支持的基本数据类型:

整数

  • TINYINT 1字节整数

  • SMALLINT 2字节整数

  • INT 4字节整数

  • BIGINT 8字节整数

布尔类型

  • BOOLEAN - TRUE/FALSE

浮点数

  • FLOAT 单精度

  • DOUBLE 双精度

字符串类型

  • STRING 



这些数据类型按照以下的层级结构进行组织(父类型是所有子类型实例的超类)

QQ截图20160317214053.png

类型等级定义了在查询时类型如何隐式的进行转换。在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.