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


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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中,分区(Partition)是一种将数据按照指定的列进行逻辑划分和存储的方式。通过将数据按照某个列的值进行分区,可以提高查询效率和数据管理的灵活性。 具体来说,以下是关于Hive分区的一些概念和特点: 1. 分区列(Partition Column):分区列是中用于进行分区的列。通常选择具有高基数(Distinct Value)的列作为分区列,以便更好地划分数据并提高查询性能。 2. 分区目录(Partition Directory):每个分区都会对应一个独立的目录,用于存储该分区的数据文件。分区目录的命名通常基于分区列的值,以便更好地组织和管理数据。 3. 动态分区(Dynamic Partition):Hive支持动态分区,在插入数据时根据数据中的列值动态创建和管理分区。这允许在插入数据时自动创建新的分区目录。 4. 静态分区(Static Partition):与动态分区相反,静态分区需要在创建时明确地定义所有分区,并提前创建对应的分区目录。 5. 多级分区(Multi-level Partitioning):Hive还支持多级分区,即在一个中使用多个列进行分区。这样可以更细粒度地划分数据,提供更灵活的查询和管理能力。 通过使用分区,可以使Hive在处理大规模数据时更高效地执行查询操作。例如,当查询仅涉及特定分区时,Hive可以仅加载相关分区的数据,而不必加载整个的数据。此外,分区还可以帮助优化数据存储和管理,以及提供更灵活的数据查询和过滤功能。 需要注意的是,在设计和使用分区时,需要考虑数据分布的均匀性、查询模式、分区列的选择等因素,以确保最佳的性能和使用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值