[英]How to update partition metadata in Hive , when partition data is manualy deleted from HDFS
自动更新Hive分区表的元数据的方法是什么?
如果将新分区数据添加到HDFS(没有alter table add partition命令执行)。 然后我们可以通过执行命令'msck repair'来同步元数据。
如果从HDFS中删除了大量分区数据(没有执行alter table drop partition commad执行),该怎么办?
同步Hive metatdata的方法是什么?
编辑 :从Hive 3.0.0开始 MSCK
现在可以使用以下语法发现新分区或删除丢失的分区(或两者):
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
这是在HIVE-17824中实施的
正如HakkiBuyukcengiz正确陈述的那样 ,如果HDFS上的相应文件夹被手动删除, MSCK REPAIR
不会删除分区,只有在创建新文件夹时才会添加分区。
从官方文档中提取:
换句话说,它将添加HDFS上存在但不在Metastore中的任何分区到Metastore。
如果在HDFS上手动删除多个分区文件夹并且我想快速刷新分区,这就是我通常在external
表存在时所做的事情:
DROP TABLE table_name
)(删除外部表不会删除底层分区文件) CREATE EXTERNAL TABLE table_name ...
) MSCK REPAIR TABLE table_name
) 根据分区数量,这可能需要很长时间。 另一个解决方案是对每个已删除的分区文件夹使用ALTER TABLE DROP PARTITION (...)
,但如果删除了多个分区,这可能会很繁琐。
尝试使用
MSCK REPAIR TABLE <tablename>;
确保将表设置为external,删除所有分区,然后运行表修复:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.