hive分区
Posted 海绵不老
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive分区相关的知识,希望对你有一定的参考价值。
hive分区
创建分区表
1.创建分区表
create external table if not exists default.deptpart1(
deptno int,
dname string,
loc int
)
PARTITIONED BY(area string)
row format delimited fields terminated by '\\t';
2.创建分区
① alter table 表名 add partition(分区字段名=分区字段值) ;
a)在hdfs上生成分区路径
b)在mysql中metastore.partitions表中生成分区的元数据
alter table deptpart1 add partition(area='huazhong');
也可创建多个分区:
hive (default)> alter table dept_partition add partition(month=‘201705’) partition(month=‘201704’);
删除单个分区(如果是外部表,只删除元数据不删除表位置的数据)
hive (default)> alter table dept_partition drop partition (month=‘201704’);
同时删除多个分区(如果是外部表,只删除元数据不删除表位置的数据)
hive (default)> alter table dept_partition drop partition (month=‘201705’), partition (month=‘201706’);
查看分区数
hive> show partitions dept_partition;
查看分区表的结构
hive> desc formatted dept_partition;
导数据
load data local inpath ‘/home/atguigu/hivedatas/department’ into table default.deptpart1 partition(area=‘huazhong’);
如果之前没有创建分区,load导入数据到分区时会自动创建分区:
多级分区表
1.创建分区表
create external table if not exists default.deptpart2(deptno int,
dname string,
loc int) PARTITIONED BY(area string,province string)
row format delimited fields terminated by '\\t';
2.导入数据
load data local inpath '/home/atguigu/hivedatas/department' into table default.deptpart2 partition(area='huazhong',province='guangdong');
数据修复
复制一份数据到根路径下
创建分区表,指定表位置的数据
create external table if not exists default.deptpart3(deptno int,
dname string,
loc int) PARTITIONED BY(area string)
row format delimited fields terminated by '\\t'
location 'hdfs://hadoop1:9000/deptpart3';
此时没有数据,因为元数据还没有分区
如果数据已经按照规范的格式,上传到了HDFS,可以使用修复分区命令自动生成分区的元数据
msck repair table 表名;
以上是关于hive分区的主要内容,如果未能解决你的问题,请参考以下文章