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

vin*_*.19 18 hive partitioning

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

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

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

同步Hive metatdata的方法是什么?

che*_*aux 24

正如HakkiBuyukcengiz正确陈述的那样,MSCK如果HDFS上的相应文件夹被手动删除,则不会删除分区,只有在创建新文件夹时才会添加分区.

从官方文档中提取:

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

MSCK REPAIR如果在HDFS上手动删除多个分区文件夹并且我想快速刷新分区,这就是我通常在存在表时所做的事情:

  • 删除表(external)(删除外部表不会删除底层分区文件)
  • 重新创建表(DROP TABLE table_name)
  • 修理它(CREATE EXTERNAL TABLE table_name ...)

根据分区数量,这可能需要很长时间.另一个解决方案是MSCK REPAIR TABLE table_name用于每个已删除的分区文件夹,但如果删除了多个分区,这可能会很繁琐.


小智 14

尝试使用

MSCK REPAIR TABLE <tablename>;
Run Code Online (Sandbox Code Playgroud)

  • Msck不会删除文件系统中不存在目录的分区.它只通知文件系统中哪些分区的目录不存在.你应该手动运行"alter table drop partition .." (12认同)

小智 6

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

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


如果 msck Repair 抛出错误,则从终端运行 hive,如下所示:
hive --hiveconf hive.msck.path.validation=ignore
set hive.msck.path.validation=ignore;