Hive数据类型和文件格式
This commit is contained in:
		| @@ -5,42 +5,27 @@ | ||||
| <a href="#二文件格式">二、文件格式</a><br/> | ||||
| <a href="#三存储格式">三、存储格式</a><br/> | ||||
| </nav> | ||||
|  | ||||
|  | ||||
| ## 一、数据类型 | ||||
|  | ||||
| ### 1.1 基本数据类型 | ||||
|  | ||||
| Hive表中的列支持以下基本数据类型: | ||||
|  | ||||
| - **Integers(整型)** | ||||
|   - TINYINT—1字节的有符号整数 | ||||
|   - SMALLINT—2字节的有符号整数 | ||||
|   - INT—4字节的有符号整数 | ||||
|   - BIGINT—8字节的有符号整数 | ||||
| - **Boolean(布尔型)** | ||||
|   - BOOLEAN—TRUE/FALSE | ||||
| - **Floating point numbers(浮点型)** | ||||
|   - FLOAT— 单精度浮点型 | ||||
|   - DOUBLE—双精度浮点型 | ||||
| - **Fixed point numbers(定点数)** | ||||
|   - DECIMAL—用户自定义精度定点数,比如2.4,3.68 | ||||
| - **String types(字符串)** | ||||
|   - STRING—指定字符集的字符序列 | ||||
|   - VARCHAR—具有最大长度限制的字符序列 | ||||
|   - CHAR—固定长度的字符序列 | ||||
| - **Date and time types(日期时间类型)** | ||||
|   - TIMESTAMP —  时间戳 | ||||
|   - TIMESTAMP WITH LOCAL TIME ZONE — 时间戳,纳秒精度 | ||||
|   - DATE—日期类型 | ||||
| - **Binary types(二进制类型)** | ||||
|   - BINARY—字节序列 | ||||
| | 大类                                    | 类型                                                         | | ||||
| | --------------------------------------- | ------------------------------------------------------------ | | ||||
| | **Integers(整型)**                    | TINYINT—1字节的有符号整数 <br/>SMALLINT—2字节的有符号整数<br/> INT—4字节的有符号整数<br/> BIGINT—8字节的有符号整数 | | ||||
| | **Boolean(布尔型)**                   | BOOLEAN—TRUE/FALSE                                           | | ||||
| | **Floating point numbers(浮点型)**    | FLOAT— 单精度浮点型 <br/>DOUBLE—双精度浮点型                 | | ||||
| | **Fixed point numbers(定点数)**       | DECIMAL—用户自定义精度定点数,比如2.4,3.68                  | | ||||
| | **String types(字符串)**              | STRING—指定字符集的字符序列<br/> VARCHAR—具有最大长度限制的字符序列 <br/>CHAR—固定长度的字符序列 | | ||||
| | **Date and time types(日期时间类型)** | TIMESTAMP —  时间戳 <br/>TIMESTAMP WITH LOCAL TIME ZONE — 时间戳,纳秒精度 DATE—日期类型 | | ||||
| | **Binary types(二进制类型)**          | BINARY—字节序列                                              | | ||||
|  | ||||
| >TIMESTAMP 和 TIMESTAMP WITH LOCAL TIME ZONE 的区别: | ||||
| > | ||||
| >TIMESTAMP WITH LOCAL TIME ZONE:用户提交时间给数据库时,该类型会转换成数据库的时区来保存。查询时则按照查询客户端的不同,转换为查询客户端所在的时区的时间。 | ||||
| >+ TIMESTAMP WITH LOCAL TIME ZONE:用户提交时间给数据库时,该类型会转换成数据库的时区来保存。查询时则按照查询客户端的不同,转换为查询客户端所在的时区的时间。 | ||||
| > | ||||
| >TIMESTAMP :提交什么时间就保存什么时间,查询时也不做任何转换。 | ||||
| >+ TIMESTAMP :提交什么时间就保存什么时间,查询时也不做任何转换。 | ||||
|  | ||||
| ### 1.2 隐式转换 | ||||
|  | ||||
| @@ -52,11 +37,11 @@ Hive中基本数据类型遵循以下的层次结构,按照这个层次结构 | ||||
|  | ||||
| ### 1.3 复杂类型 | ||||
|  | ||||
| | 类型   | 描述                                                         | 示例                                   | | ||||
| | ------ | ------------------------------------------------------------ | -------------------------------------- | | ||||
| | STRUCT | 类似于对象,是字段的集合,字段的类型可以不同,可以使用 `名称.字段名`方式进行访问 | STRUCT ('xiaoming', 12 , '2018-12-12') | | ||||
| | MAP    | 键值对的集合,可以使用`名称[key]`的方式访问对应的值          | map('a', 1, 'b', 2)                    | | ||||
| | ARRAY  | 数组是一组具有相同类型和名称的变量的集合,可以使用`名称[index]`访问对应的值 | ARRAY('a', 'b', 'c', 'd')              | | ||||
| | 类型       | 描述                                                         | 示例                                   | | ||||
| | ---------- | ------------------------------------------------------------ | -------------------------------------- | | ||||
| | **STRUCT** | 类似于对象,是字段的集合,字段的类型可以不同,可以使用 `名称.字段名`方式进行访问 | STRUCT ('xiaoming', 12 , '2018-12-12') | | ||||
| | **MAP**    | 键值对的集合,可以使用`名称[key]`的方式访问对应的值          | map('a', 1, 'b', 2)                    | | ||||
| | **ARRAY**  | 数组是一组具有相同类型和名称的变量的集合,可以使用`名称[index]`访问对应的值 | ARRAY('a', 'b', 'c', 'd')              | | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -89,6 +74,67 @@ CREATE TABLE students( | ||||
| | ^B          | 用于分割 ARRAY 或者 STRUCT 中的元素,或者用于 MAP 中键值对之间的分割,<br/>在CREATE TABLE语句中也可以使用八进制编码`\002` 表示 | | ||||
| | ^C          | 用于 MAP 中键和值之间的分割,在CREATE TABLE语句中也可以使用八进制编码`\003` 表示 | | ||||
|  | ||||
| 使用示例如下: | ||||
|  | ||||
| ```sql | ||||
| CREATE TABLE page_view(viewTime INT, userid BIGINT) | ||||
|  ROW FORMAT DELIMITED | ||||
|    FIELDS TERMINATED BY '\001' | ||||
|    COLLECTION ITEMS TERMINATED BY '\002' | ||||
|    MAP KEYS TERMINATED BY '\003' | ||||
|  STORED AS SEQUENCEFILE; | ||||
| ``` | ||||
|  | ||||
|  | ||||
|  | ||||
| ## 三、存储格式 | ||||
|  | ||||
| ### 3.1 支持的存储格式 | ||||
|  | ||||
| Hive会在HDFS为每个数据库上创建一个目录,数据库中的表是该目录的子目录,表中的数据会以文件的形式存储在对应的表目录下。Hive支持以下几种文件存储格式: | ||||
|  | ||||
| | 格式             | 说明                                                         | | ||||
| | ---------------- | ------------------------------------------------------------ | | ||||
| | **TextFile**     | 存储为纯文本文件。 这是Hive默认的文件存储格式。这种存储方式数据不做压缩,磁盘开销大,数据解析开销大。 | | ||||
| | **SequenceFile** | SequenceFile是Hadoop API提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值,这样是为了避免MR 在运行map阶段的排序过程。 | | ||||
| | **RCFile**       | RCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储。 | | ||||
| | **ORC Files**    | ORC是在一定程度上扩展了RCFile,是对RCFile的优化。            | | ||||
| | **Avro Files**   | Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。 | | ||||
| | **Parquet**      | Parquet就是基于Dremel的数据模型和算法实现的,面向分析型业务的列式存储格式。辅以按列的高效压缩和编码技术,实现降低存储空间,提高IO效率,降低上层应用延迟。 | | ||||
|  | ||||
| > 综合各方面性能考虑,以上压缩格式中ORC和parquet格式的使用较为广泛。 | ||||
|  | ||||
| ### 3.2 指定存储格式 | ||||
|  | ||||
| 通常在创建表的时候使用`STORED AS`参数指定: | ||||
|  | ||||
| ```shell | ||||
| CREATE TABLE page_view(viewTime INT, userid BIGINT) | ||||
|  ROW FORMAT DELIMITED | ||||
|    FIELDS TERMINATED BY '\001' | ||||
|    COLLECTION ITEMS TERMINATED BY '\002' | ||||
|    MAP KEYS TERMINATED BY '\003' | ||||
|  STORED AS SEQUENCEFILE; | ||||
| ``` | ||||
|  | ||||
| 各个存储文件类型指定方式如下: | ||||
|  | ||||
| - STORED AS TEXTFILE | ||||
|  | ||||
| - STORED AS SEQUENCEFILE | ||||
|  | ||||
| - STORED AS ORC | ||||
|  | ||||
| - STORED AS PARQUET | ||||
|  | ||||
| - STORED AS AVRO | ||||
|  | ||||
| - STORED AS RCFILE | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## 参考文档 | ||||
|  | ||||
| 1. [LanguageManual DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL) | ||||
| 2. [LanguageManual Types](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types) | ||||
		Reference in New Issue
	
	Block a user