自动更新Hive分区表元数据的方法是什么?
如果向HDFS添加了新的分区数据(未执行alter table add partition命令),那么我们可以通过执行“msck repair”命令来同步元数据。
如果从HDFS中删除了大量分区数据(未执行alter table drop partition命令),应该怎么做?
同步Hive元数据的方法是什么?
自动更新Hive分区表元数据的方法是什么?
如果向HDFS添加了新的分区数据(未执行alter table add partition命令),那么我们可以通过执行“msck repair”命令来同步元数据。
如果从HDFS中删除了大量分区数据(未执行alter table drop partition命令),应该怎么做?
同步Hive元数据的方法是什么?
编辑:从Hive 3.0.0开始,MSCK
现在可以使用以下语法发现新的分区或删除丢失的分区(或两者都有):
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
这是在 HIVE-17824 中实现的。
正如HakkiBuyukcengiz所述,MSCK REPAIR
不能删除在HDFS上手动删除的分区对应的文件夹,它只添加新的文件夹对应的分区。
官方文档摘录如下:
换句话说,它会将存在于HDFS但不在metastore中的任何分区添加到metastore中。
当我在存在外部表的情况下在HDFS上手动删除多个分区文件夹并且想要快速刷新分区时,我通常会执行以下操作:
DROP TABLE table_name
)
(删除外部表不会删除底层的分区文件)CREATE EXTERNAL TABLE table_name ...
)MSCK REPAIR TABLE table_name
)根据分区数量的不同,这可能需要很长时间。另一个解决方案是对每个删除的分区文件夹使用ALTER TABLE DROP PARTITION (...)
,但如果删除了多个分区,则可能会很繁琐。
试着使用
MSCK REPAIR TABLE <tablename>;
确保表已设置为外部表,删除所有分区,然后运行表修复:
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 repair报错,则可以通过以下方式在终端中运行hive:
hive --hiveconf hive.msck.path.validation=ignore
或者 set hive.msck.path.validation=ignore;