Hive支持的数据类型

基本数据类型:

数据类型 长度 例子
TINYINT 1byte有符号整数 20
SMALLINT 2byte有符号整数 20
INT 4byte有符号整数 20
BIGINT 8byte有符号整数 20
BOOLEAN 布尔类型,true或者false TRUE
FLOAT 单精度浮点数 3.14159
DOUBLE 双精度浮点数 3.14159
STRING 字符系列.可以指定字符集。可使用单引号或者双引号 'now is the time',"for all good time"
TIMESTAMP(v0.8.0+) 整数,浮点数或者字符串 1327882394(Unix 新纪元秒),1327882394.123456789(Unix新纪元并跟随有纳秒数)和"2012-02-03 12:34:56.123456789"(JDBC所兼容的java.sql.Timestamp时间格式
BINARY(v0.8.0+) 字节数组

集合数据类型:

数据类型 描述 字母语法示例
STRUCT 和C语言中的struct或者"对象"类似,都可以通过"点"符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING,last STRING},那么第1个元素可以通过 字段名.first 来引用 struct('John','Doe')
MAP MAP是一组键-值对元素集合,使用数组表示法(例如['key'])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是 'first'->'John'和'last'->'Doe',那么可以通过 字段名['last']获取最后1个元素 map('first','John','last','Doe')
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为['John','Doe'],那么第2个元素可以通过 数组名[1]进行引用 Array('John','Doe')

大多数的关系型数据库如Oracle,SQL Server,MySQL并不支持这些集合数据类型,因为使用它们会趋向于破坏标准格式。例如,在传统数据模型中,structs可能需要多个不同的表拼装而成,表间需要适当地使用外键来进行连接。

破坏标准格式所带来的一个实际问题是会增大数据冗余的风险,进而导致消耗不必要的磁盘空间,还有可能造成数据不一致,因为当数据
发生改变时冗余的拷贝数据可能无法进行相应的同步。

然而,在大数据系统中,不遵循标准格式的一个好处是可以提供更高吞吐量的数据。当处理的数据的量级是T或者P时,以最少的"头部寻址"来从磁盘上扫描数据是非常不要的。按数据集进行封装的话可以通过减少寻址次数来提供查询的速度。而如果根据外键关系关联的话则需要磁盘间的寻址操作,这样会有非常高的性能消耗。

我们以创建一张表的数据演示一下如何使用这些数据类型:

CREATE TABLE employees(
    name         STRING,
    salary       FLOAT,
    subordinates ARRAY,
    deductions   MAP,
    address     STRUCT

你可能感兴趣的:(Hive支持的数据类型)