我们在之前的文章中,介绍了二级分区,混合分区,静态分区,动态分区的区别和建表。
今天我们聊下,当我们建好分区表。并且通过程序在表的分区目录(location)下,写入了文件。
如何在hive中查询到插入的分区数据。
假如我们直接查表,会发现因为没有在表的元数据中加入新增的分区信息,导致查不到数据。
这时,
可以通过hive修复分区的sql语句,自动修复hive的分区
msck repair table table_name;
或手动增加分区
alter table add partition 'province = zhejiang';
但是,当我们建了多级分区,如下,
CREATE EXTERNAL TABLE `ods.employee`( `name` string,
`sex` string,
`age` int
) PARTITIONED BY ( `province` string, `city` string)
使用hive提供的修复分区语句,会报如下的错误:
Logging initialized using configuration in file:/usr/local/service/hive/conf/hive-log4j2.properties Async: false FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
这时,只能通过手动的方式,增加分区了,并且要指定分区的hdfs路径:
alter table add partition ('province=zhejiang,city=hangzhou') location 'hdfs://data/province/province=zhejiang/city=hangzhou'