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

问题描述 投票:12回答:3

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

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

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

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

hive partitioning
3个回答
15
投票

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

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

这是在HIVE-17824实施的


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

从官方qazxsw poi中提取:

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

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

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

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


13
投票

尝试使用

ALTER TABLE DROP PARTITION (...)

0
投票

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

MSCK REPAIR TABLE <tablename>;

如果msck修复抛出错误,则从终端运行配置单元: alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE') alter table mytable_name drop if exists partition (`mypart_name` <> 'null'); msck repair table mytable_name; 或者hive --hiveconf hive.msck.path.validation=ignore

© www.soinside.com 2019 - 2024. All rights reserved.