/*
* Lee 2013.11.11翻译 《programming hive》 第三章节Data Types and File Formats
@page表示 翻译原文页码
*/
@@ page41
Hive支持常见的基础关系型数据库类型,同时还支持集合类型(collection data types)
Hive支持的基础数据类型
===================================================
类型 |Size| 示例
TINYINT |1byte| 一字节带符号整型 20
SMALLINT |2byte| 二字节带符号整型 20
INT |4byte| 四字节带符号整型 20
BIGINT |8byte| 八字节带符号整型 20
BOOLEAN |1byte| 布尔型 TRUE
FLOAT 单精度浮点 3.14159
DOUBLE 双精度浮点 3.14159
STRING 字符串,每个字符可以设置
TIMESTAMP |Integer, float, or string|
====================================================
TIMESTAMP Integer为Unix时间戳,String为时间表示
@@page 42
Hive由JAVA实现,其类型有相应的JAVA类型实现,如String ,float,对应JAVA相应类型
注意,Hive没有要求最大字符串长度定义类似varchar(100).应为Hive中字段用分隔号隔开。
传统关系型数据库使用最大字符串定义,主要是为了优化其单个查询操作OLTP特性。而Hadoop
强调优化磁盘读写,海量IO、故而最大字符长度限制在HIVE中不重要。
INT FLOAT DOUBLE 可以互相转换,字符串亦可解释为整形。使用... cast(s AS INT) ...;
详情见本书109页
@@page 43
集合类型(collection data types)
==========================================================================
类型 解释 示例
STRUCT 类似C语言结构体 struct('John', 'Doe')
MAP 键值对,用name['last']取 map('first', 'John','last', 'Doe')
ARRAY 数组,用下标取 name[1]-> 'Doe' array('John', 'Doe')
=========================================================================
为了维护关系型系统规范化,传统关系型数据库一般不支持集合类型。子类型的泛化
用多表外键连接表表示。在大数据处理实践中,打破关系范式就非常有必要。最直观的
好处在于,数据连续存放,减少硬盘寻道时间,提高IO速度。
Hive中没有主键的概念,但支持建立索引,在第七章中具体讨论index的问题。
一个人力资源应用示例:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>);
subordinates是下属名单, 为String数组。没有下属的雇员subordinates字段为空数组。
deductions是工资扣除项目,类似<‘公积金’,600>,<‘个税’,100> 为一个Map。
address是一个混合类型示例,采用自定义结构体。
@@ P45
#文本存储数据格式组织
在文本中,我们习惯用逗号, 或者制表符区分一个字段。 然而,这样和数据中的逗号(制表符)
冲突。 Hive默认使用一下分隔符。
=========================================================
分隔符 描述
\n 区别一行
^A (ctrl-A) 分隔字段,在见表语句中使用 \001
^B 分隔ARRAY、STRUCT中元素,分隔各对MapKey \002
^C 分隔键值对中的 键和值 \003
========================================================
在上个人力资源应用示例中,数据将如一下方式存放
John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BState
Taxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600
Mary Smith^A80000.0^ABill King^AFederal Taxes^C.2^BState Taxes^C.
05^BInsurance^C.1^A100 Ontario St.^BChicago^BIL^B60601
Todd Jones^A70000.0^AFederal Taxes^C.15^BState Taxes^C.03^BInsurance^C.
1^A200 Chicago Ave.^BOak Park^BIL^B60700
完整的人力资源应用见表语句如下:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
* Lee 2013.11.11翻译 《programming hive》 第三章节Data Types and File Formats
@page表示 翻译原文页码
*/
@@ page41
Hive支持常见的基础关系型数据库类型,同时还支持集合类型(collection data types)
Hive支持的基础数据类型
===================================================
类型 |Size| 示例
TINYINT |1byte| 一字节带符号整型 20
SMALLINT |2byte| 二字节带符号整型 20
INT |4byte| 四字节带符号整型 20
BIGINT |8byte| 八字节带符号整型 20
BOOLEAN |1byte| 布尔型 TRUE
FLOAT 单精度浮点 3.14159
DOUBLE 双精度浮点 3.14159
STRING 字符串,每个字符可以设置
TIMESTAMP |Integer, float, or string|
====================================================
TIMESTAMP Integer为Unix时间戳,String为时间表示
@@page 42
Hive由JAVA实现,其类型有相应的JAVA类型实现,如String ,float,对应JAVA相应类型
注意,Hive没有要求最大字符串长度定义类似varchar(100).应为Hive中字段用分隔号隔开。
传统关系型数据库使用最大字符串定义,主要是为了优化其单个查询操作OLTP特性。而Hadoop
强调优化磁盘读写,海量IO、故而最大字符长度限制在HIVE中不重要。
INT FLOAT DOUBLE 可以互相转换,字符串亦可解释为整形。使用... cast(s AS INT) ...;
详情见本书109页
@@page 43
集合类型(collection data types)
==========================================================================
类型 解释 示例
STRUCT 类似C语言结构体 struct('John', 'Doe')
MAP 键值对,用name['last']取 map('first', 'John','last', 'Doe')
ARRAY 数组,用下标取 name[1]-> 'Doe' array('John', 'Doe')
=========================================================================
为了维护关系型系统规范化,传统关系型数据库一般不支持集合类型。子类型的泛化
用多表外键连接表表示。在大数据处理实践中,打破关系范式就非常有必要。最直观的
好处在于,数据连续存放,减少硬盘寻道时间,提高IO速度。
Hive中没有主键的概念,但支持建立索引,在第七章中具体讨论index的问题。
一个人力资源应用示例:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>);
subordinates是下属名单, 为String数组。没有下属的雇员subordinates字段为空数组。
deductions是工资扣除项目,类似<‘公积金’,600>,<‘个税’,100> 为一个Map。
address是一个混合类型示例,采用自定义结构体。
@@ P45
#文本存储数据格式组织
在文本中,我们习惯用逗号, 或者制表符区分一个字段。 然而,这样和数据中的逗号(制表符)
冲突。 Hive默认使用一下分隔符。
=========================================================
分隔符 描述
\n 区别一行
^A (ctrl-A) 分隔字段,在见表语句中使用 \001
^B 分隔ARRAY、STRUCT中元素,分隔各对MapKey \002
^C 分隔键值对中的 键和值 \003
========================================================
在上个人力资源应用示例中,数据将如一下方式存放
John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BState
Taxes^C.05^BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600
Mary Smith^A80000.0^ABill King^AFederal Taxes^C.2^BState Taxes^C.
05^BInsurance^C.1^A100 Ontario St.^BChicago^BIL^B60601
Todd Jones^A70000.0^AFederal Taxes^C.15^BState Taxes^C.03^BInsurance^C.
1^A200 Chicago Ave.^BOak Park^BIL^B60700
完整的人力资源应用见表语句如下:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;