当从HDFS手动删除分区数据时,如何在Hive中更新分区元数据

时间:2014-01-14 07:43:49

标签: hive partitioning

自动更新Hive分区表的元数据的方法是什么?

如果将新分区数据添加到HDFS(没有alter table add partition命令执行)。然后我们可以通过执行命令'msck repair'来同步元数据。

如果从HDFS中删除了大量分区数据(没有执行alter table drop partition commad执行),该怎么办。

同步Hive元数据的方法是什么?

3 个答案:

答案 0 :(得分:15)

编辑:从 Hive 3.0.0 MSCK开始,现在可以使用以下语法发现新分区或删除丢失的分区(或两者):

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]

这是在HIVE-17824

中实施的

HakkiBuyukcengiz所述,如果HDFS上的相应文件夹被手动删除,则MSCK REPAIR不会删除分区,只有在新文件夹创建时才会添加分区。

摘自官方documentation

  

换句话说,它会将HDFS上存在但不存在于Metastore中的任何分区添加到Metastore中。

如果在HDFS上手动删除了多个分区文件夹并且我想快速刷新分区,这就是我在external表存在时通常会执行的操作:

  • 删除表格(DROP TABLE table_name) (删除外部表不会删除基础分区文件)
  • 重新创建表格(CREATE EXTERNAL TABLE table_name ...
  • 修复它(MSCK REPAIR TABLE table_name

根据分区数量,这可能需要很长时间。另一个解决方案是对每个已删除的分区文件夹使用ALTER TABLE DROP PARTITION (...),但如果删除了多个分区,这可能会很乏味。

答案 1 :(得分:13)

尝试使用

MSCK REPAIR TABLE <tablename>;

答案 2 :(得分:0)

确保将表设置为外部,删除所有分区,然后运行表修复:

alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE')
alter table mytable_name drop if exists partition (`mypart_name` <> 'null');
msck repair table mytable_name;


如果msck修复引发错误,则从终端运行配置单元为:
hive --hiveconf hive.msck.path.validation=ignore
set hive.msck.path.validation=ignore;