自动更新Hive分区表元数据的方式是什么?
如果将新分区数据添加到HDFS (不执行alter table add partition命令)。然后我们可以通过执行命令'msck repair‘来同步元数据。
如果从HDFS中删除了大量分区数据(没有执行alter table drop partition commad ),该怎么办?
同步蜂窝元数据的方法是什么?
发布于 2017-07-11 21:49:44
编辑:从配置单元3.0.0开始, MSCK
现在可以使用以下语法发现新分区或删除丢失的分区(或两者):
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
这是在HIVE-17824中实现的
正如HakkiBuyukcengiz所说的那样,如果HDFS上的相应文件夹是手动删除的,MSCK REPAIR
不会删除分区,只有当新文件夹是创建的时,它才会添加分区。
摘自offical documentation:
换句话说,它会将HDFS上存在但不在metastore中的任何分区添加到metastore。
如果在external
上手动删除了多个分区文件夹,并且我想快速刷新分区,这是我在有HDFS表的情况下通常会做的事情:
删除表(Drop
DROP TABLE table_name
) )(删除外部表不会删除它所在的表的底层分区根据分区数量的不同,这可能需要很长时间。另一种解决方案是对每个已删除的分区文件夹使用ALTER TABLE DROP PARTITION (...)
,但如果删除了多个分区,这可能会很繁琐。
发布于 2014-02-10 02:14:12
尝试使用
MSCK REPAIR TABLE <tablename>;
发布于 2018-12-05 18:19:28
确保表设置为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:
hive --hiveconf hive.msck.path.validation=ignore
或set hive.msck.path.validation=ignore;
https://stackoverflow.com/questions/21108251
复制相似问题