Hive表分区操作

分区简介

Hive在对数据进行查询的时候一般会对整个表进行扫描,当表很大的时候会消耗很多时间,有时候只是需要对表中的一部分数据进行扫描,因此Hive引入分区。

Hive分区不同于一般分布式系统下的范围分区,哈希分区,一致性分区等。 Hive的分区是在Hive的表结构下面根据分区的字段设置将数据按照目录进行存放,相当于简单的索引功能。
Hive表分区需要在创建表的时候指定模式(Hive创建表的时候指定模式的语句: PARTITIONED BY (part_1 STRING,part_2 STRING))才能够使用。它的字段指定的是虚拟的列,在实际的表中并不存在,在Hive表分区的模式下可以指定多级结构,相当于对目录进行嵌套。

Hive表分区操作主要包含创建分区,增加分区和删除分区。
创建分区在创建表的时候完成,具体参考:Hive创建表.

(1)增加分区

ALTER TABLE table_name ADD partition_spec [LOCATION 'location']  partition_spec [LOCATION 'location']...
partition_spec::PARTITION (partition_col = partition_col_name,partition_col = partition_col_name,...)


查看表结构:
hive> describe test_table_partition;
OK
name                    string                                      
userid                  int                                         
ip                      string                  ip address of the user
part_1                  string                                      
part_2                  string                                      
         
# Partition Information         
# col_name                data_type               comment             
         
part_1                  string                                      
part_2                  string                                      
Time taken: 0.125 seconds, Fetched: 11 row(s)

增加分区:
hive> ALTER TABLE test_table_partition ADD
    > PARTITION (part_1 = 'part_1_1',part_2='part_2_1')
    > LOCATION '/user/hive/testpartition1'
    > PARTITION (part_1 = 'part_1_2',part_2 = 'part_2_2')
    > LOCATION '/user/hive/testpartition2'
;
OK
Time taken: 0.838 seconds

查看增加分区后的表目录结构:
caiyong@caiyong:/opt/hadoop$ bin/hadoop fs -ls /user/hive/
Found 4 items
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 11:14 /user/hive/outtable
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 15:01 /user/hive/testpartition1
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 15:01 /user/hive/testpartition2

drwxr-xr-x   - caiyong supergroup          0 2015-03-11 12:21 /user/hive/warehouse

(2)删除分区

ALTER TABLE table_name DROP partition_spec ,partition_spec ......
删除分区的时候,分区的元数据和数据将会被一并删除。

删除分区:
hive> ALTER TABLE test_table_partition DROP PARTITION(part_1 = 'part_1_1',part_2 = 'part_2_1');
Dropped the partition part_1=part_1_1/part_2=part_2_1

OK
Time taken: 2.959 seconds

查看删除分区后的表目录结构:
caiyong@caiyong:/opt/hadoop$ bin/hadoop fs -ls /user/hive
Found 3 items
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 11:14 /user/hive/outtable
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 15:01 /user/hive/testpartition2
drwxr-xr-x   - caiyong supergroup          0 2015-03-11 12:21 /user/hive/warehouse


注意:当没有声明模式的时候不能为表指定具体的分区,分区名不能与表字段名重复。



你可能感兴趣的:(hive,表分区操作,Hive表分区操作)