1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。
2、分区表指的是在创建表时指定的partition的分区空间。
3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by
Hive组织表到分区。它是将一个表到基于分区列,如日期,城市和部门的值相关方式。使用分区,很容易对数据进行部分查询。
表或分区是细分成桶,以提供额外的结构,可以使用更高效的查询的数据。桶的工作是基于表的一些列的散列函数值。
例如,一个名为Tab1表包含雇员数据,如 id, name, dept 和yoj (即加盟年份)。假设需要检索所有在2012年加入,查询搜索整个表所需的信息员工的详细信息。但是,如果用年份分区雇员数据并将其存储在一个单独的文件,它减少了查询处理时间。下面的示例演示如何分区的文件和数据:
下面文件包含employee 数据表。
/tab1/employeedata/file1
id, name, dept, yoj 1, gopal, TP, 2012 2, kiran, HR, 2012 3, kaleel,SC, 2013 4, Prasanth, SC, 2013
上面的数据被划分成使用年两个文件。
/tab1/employeedata/2012/file2
1, gopal, TP, 2012 2, kiran, HR, 2012
/tab1/employeedata/2013/file3
3, kaleel,SC, 2013 4, Prasanth, SC, 2013
添加分区
可以通过添加分区表改变所述表。假设我们有一个表叫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表
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=’1203’) > RENAME TO PARTITION (Yoj=’1203’);
删除分区
下面语法用于删除分区:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
以下查询是用来删除分区:
hive> ALTER TABLE employee DROP [IF EXISTS] > PARTITION (year=’1203’);
基于分区的查询的语句:
SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';
查看分区语句:
hive> show partitions day_hour_table; OK dt=2008-08-08/hour=08 dt=2008-08-08/hour=09 dt=2008-08-09/hour=09
hive中关于partition的操作:
hive> create table mp (a string) partitioned by (b string, c string); OK Time taken: 0.044 seconds hive> alter table mp add partition (b='1', c='1'); OK Time taken: 0.079 seconds hive> alter table mp add partition (b='1', c='2'); OK Time taken: 0.052 seconds hive> alter table mp add partition (b='2', c='2'); OK Time taken: 0.056 seconds hive> show partitions mp ; OK b=1/c=1 b=1/c=2 b=2/c=2 Time taken: 0.046 seconds hive> explain extended alter table mp drop partition (b='1'); OK ABSTRACT SYNTAX TREE: (TOK_ALTERTABLE_DROPPARTS mp (TOK_PARTSPEC (TOK_PARTVAL b '1'))) STAGE DEPENDENCIES: Stage-0 is a root stage STAGE PLANS: Stage: Stage-0 Drop Table Operator: Drop Table table: mp Time taken: 0.048 seconds hive> alter table mp drop partition (b='1'); FAILED: Error in metadata: table is partitioned but partition spec is not specified or tab: {b=1} FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show partitions mp ; OK b=1/c=1 b=1/c=2 b=2/c=2 Time taken: 0.044 seconds hive> alter table mp add partition ( b='1', c = '3') partition ( b='1' , c='4'); OK Time taken: 0.168 seconds hive> show partitions mp ; OK b=1/c=1 b=1/c=2 b=1/c=3 b=1/c=4 b=2/c=2 b=2/c=3 Time taken: 0.066 seconds hive>insert overwrite table mp partition (b='1', c='1') select cnt from tmp_et3 ; hive>alter table mp add columns (newcol string); location指定目录结构 hive> alter table alter2 add partition (insertdate='2008-01-01') location '2008/01/01'; hive> alter table alter2 add partition (insertdate='2008-01-02') location '2008/01/02';
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程