3.3 分区表 Partition

2016-04-16 13:55:48 4,568 0


分区表实际上是将原来在关系型数据库中的一个大表的数据分开来存储。

一个典型的案例:每日新增用户。

在关系型数据库中,我们会给用户表添加一个字段register_time,如果要查询某天的新增用户的时候,我们制定regster_time等于某一天。

HIVE采取了另外一种策略,即存储的时候就将每天的数据分开来存,每天的数据存储在不同的位置上,那么在查询的时候,只要需要操作某一天的数据文件即可,不需要查询所有的数据,然后再进行过滤。

·         Partition 对应于数据库的 Partition 列的密集索引

·         Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中

分区表的创建语法

CREATE TABLE partition_table(id int,name string) PARTITIONED BY(day string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;

准备数据partition.txt


1       tianshouzhi   

2       wangxiaoxiao   


导入数据

LOAD DATA LOCAL INPATH '/root/stu.txt' INTO TABLE partition_table PARTITION('20160416');
LOAD DATA LOCAL INPATH '/root/stu.txt' INTO TABLE partition_table PARTITION('20160415');
LOAD DATA LOCAL INPATH '/root/stu.txt' INTO TABLE partition_table PARTITION('20160414');

完成之后,控制台中的数据如下所示:

QQ截图20160416135210.png

删除分区

 alter table partition_table drop partition(day='20160414');

说明:

分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

0: jdbc:hive2://localhost:10000> describe partition_table;
+--------------------------+-----------------------+-----------------------+--+
|         col_name         |       data_type       |        comment        |
+--------------------------+-----------------------+-----------------------+--+
| id                       | int                   |                       |
| name                     | string                |                       |
| day                      | string                |                       |
|                          | NULL                  | NULL                  |
| # Partition Information  | NULL                  | NULL                  |
| # col_name               | data_type             | comment               |
|                          | NULL                  | NULL                  |
| day                      | string                |                       |
+--------------------------+-----------------------+-----------------------+--+