基本数据类型:
数据类型 | 长度 | 例子 |
---|---|---|
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<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT
);