我有一个外部表名称MIAC,并将其重命名为MIAC_BKUP。另外,我使用Alter语句将外部表的位置从MIAC重命名为MIAC_bkup。
现在,我再次创建一个名称为MIAC的新外部表以填充新值,但我看到MIAC_BKUP也仅使用新值而不使用bckup值进行更新。
我怀疑metastore无法更新。我进行了MSCK维修,但没有成功。
都是分区表
最佳答案
因此,您需要在流程中进行三件事更改。
hdfs:///<some-lcoation>/MIAC
重命名为hdfs:///<some-lcoation>/MIAC_bkup
(您也这样做)ALTER TABLE MIAC_bkup SET LOCATION "hdfs:///<some-lcoation>/MIAC_bkup"
因此,当您将数据添加到新的MIAC中时,备份表和新表都指向
hdfs:///<some-lcoation>/MIAC
。这就是您在备份表中看到通过新表添加的数据的原因。Untill here everything should work for you. Even you don’t have to do msck repair.
I believe you don’t have partition, because in that case your issue would be different.
But if the table has partition please follow these additional steps.
在元数据中,配置单元还存储分区位置。
因此,您现有的分区元数据不知道位置更改。
您还需要刷新分区元数据。
仅
MSCK REPAIR
不能完成这项工作。您必须1从元数据中删除所有分区信息,然后执行MSCK来同步备份位置中的旧分区。-- drop all partiotion
ALTER TABLE MIAC_bkup DROP PARTITION(partition_name <> ''); --refer this to understand
-- repair table
MSCK REPAIR TABLE MIAC_bkup;
NB: MSCK repair doesn’t delete partition, it only adds or checks inconsistency
关于hadoop - hive :重命名和更改表后,Metastore不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62307464/