第24章分区
Hive组织table进入分区。该方法是把一个表分层相关的部分,每个部分基于分区列的值,如日期、城市、部门等。用分区,很容易查询一部分数据。
表(Table) 或分区(Partition)被细分成桶(buckets),为了提供额外的结构,该结构使数据可以用于更有效的查询。buckets工作是基于表的某列的哈希函数值。
例如,Tab1表包含employee数据例如id、name、dept、yoj(year ofjoining)。假设需要检索2012年加入所有的employee的详细信息。查询语句在整个表中搜索所需的信息。然而,如果按年份对员工数据进行划分,并将其存储在单独的文件中,它减少了查询处理时间。下面一个例子,显示如何分割文件及其数据:
如下文件,包含employee数据表:
/tab1/employeedata/file1
id,name, dept, yoj
1, gopal, TP, 2012
2, kiran, HR, 2012
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
创建并插入数据到employee:
按年份把上面的数据分进两个文件内:
/tab1/employeedata/2012/file2
1, gopal, TP, 2012
2, kiran, HR, 2012
/tab1/employeedata/2013/file3
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
24.1添加分区(Adding a Partition)
通过修改table来添加分区到table中。假设有表employee,该张表带有如下属性:Id、Name、Salary、Designation、Dept、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, ...)
如下查询语句被用于给employee表添加一个分区:
ALTER TABLE employee ADD PARTITION (year='2013') location '/2012/part2012';
24.2 重命名分区(Renaminga Partition)
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
实例:
ALTER TABLE employee PARTITION (year='1203') RENAME TO PARTITION (yoj='1203');
24.3 删除分区(Dropinga Partition)
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
实例:
ALTER TABLE employee DROP [IF EXISTS] PARTITION (year='1203')