Hive对表有分区的功能。
Hive根据表的列属性值,诸如日期,城市,部门对表进行分区,使用分区,能够很容易查询到数据的一部分。
表或分区被分为buckets(桶),以便为数据提供额外的数据结构,该数据结构被用于提升查询的有效性。
buckets(桶)的工作依赖于表中某个列的哈希函数值。
例如,一个名为Tab1的表包含员工的信息,如id、名称、部门和yoj(即加入年份)。假设您需要检索所有在2012年加入的员工的详情。一个方法是查询搜索整个表的信息。然而,如果你根据年份将员工数据进行分区并将其存储在一个单独的文件中,它将会减少查询处理的时间。下面的例子显示了如何分区文件及其数据:
以下文件包含employeedata表:
/tab1/employeedata/file1,
包含数据如下:
id, name, dept, yoj
1, gopal, TP, 2012
2, kiran, HR, 2012
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
将以上数据通过年份划分为2个文件,
/tab1/employeedata/2012/file2,包含数据如下:
1、gopal,TP,2012年
2、kiran、HR,2012年
/tab1/employeedata/2013/file3,包含数据如下:
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
添加一个分区
我们通过修改表结构为表添加分区。假设我们有一个包含Id、名称、工资、名称、部门、yoj等字段的员工表,语法如下:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec
[LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
其中partition_spec:
: (p_column = p_col_value, p_column = p_col_value, ...)
例子:我们为员工表添加以年份为分区的分区:
hive> ALTER TABLE employee ADD PARTITION (year=’2013’) location '/2012/part2012';
重命名一个分区
语法如下:
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
例子:hive> ALTER TABLE employee PARTITION (year=’2013’) RENAME TO PARTITION (Yoj=’2013’);
删除一个分区
语法如下:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
例子:
hive> ALTER TABLE employee DROP [IF EXISTS] PARTITION (year=’2013’);