【问题标题】:Hive: Metastore doesn't gets updated once table is renamed and alteredHive:一旦表被重命名和更改,Metastore 就不会更新
【发布时间】:2023-03-06 04:08:01
【问题描述】:

我有一个外部表名 MIAC,我将其重命名为 MIAC_BKUP。另外,我使用 Alter 语句将外部表的位置从 MIAC 重命名为 MIAC_bkup。

现在我再次创建一个名为 MIAC 的新外部表来填充新值,但我看到 MIAC_BKUP 也只更新了新值,没有备份值。

我怀疑 Metastore 没有更新。我运行了 MSCK 修复,但没有成功。

都是分区表

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    因此,您的流程中有 3 件事发生了变化。

    1. 将表从 MIAC 重命名为 MIAC_bkup(您这样做了)
    2. 将表位置 hdfs:///<some-lcoation>/MIAC 重命名为 hdfs:///<some-lcoation>/MIAC_bkup(您也这样做了)
    3. 通过以下查询让表格知道您的新位置。
    ALTER TABLE MIAC_bkup SET LOCATION "hdfs:///<some-lcoation>/MIAC_bkup"
    

    因此,当您将数据添加到新 MIAC 时,备份表和新表都指向 hdfs:///&lt;some-lcoation&gt;/MIAC。这就是您在通过新表添加的备份表中看到数据的原因。

    到这里为止,一切都应该适合您。 即使您不必进行 msck 修复。

    我相信你没有分区,因为在那种情况下你的问题会有所不同。
    但是如果表有分区,请按照这些额外的步骤操作。

    在元数据中,hive 还存储分区位置。 因此,您现有的分区元数据不知道位置更改。 您还需要刷新分区元数据。

    MSCK REPAIR 单独无法完成这项工作。您必须首先从元数据中删除所有分区信息,然后执行 MSCK 以同步备份位置中的旧分区。

    -- drop all partiotion
    ALTER TABLE MIAC_bkup DROP PARTITION(partition_name <> ''); --refer this to understand 
    
    -- repair table
    MSCK REPAIR TABLE MIAC_bkup;
    

    注意:MSCK 修复不会删除分区,它只会添加或检查不一致

    【讨论】:

    • 你的回答很有道理。我们基本上在做同样的事情。我只会检查并接受您的回答。 ?
    • 是的。如果要删除表,所有元数据将与分区元数据一起被删除。当你重新创建表时,最初它没有任何分区信息。执行 MSCK 后,它将查看 table def 中指定的位置并同步它添加分区。
    • 感谢您的回答。当我们简单地删除表并重新创建它时,它也可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多