Hive数据类型和文件格式

This commit is contained in:
luoxiang 2019-04-23 22:13:01 +08:00
parent 85390c093d
commit c6eb4bd069

View File

@ -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.43.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.43.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)