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分区的主要内容,如果未能解决你的问题,请参考以下文章

Hive中4个By的区别以及如何调优?你知道么?

hive创建分区 9870查询不到

hive 分区表

hive的严格模式和分区

hive外部表分区

在同一个 Hive 表上进行多次压缩