当前位置: 首页 > 知识库问答 >
问题:

当分区数据从HDFS中被手动删除时,如何更新配置单元中的分区元数据

阎彬炳
2023-03-14

如果新的分区数据被添加到HDFS(没有alter table添加分区命令执行)。然后,我们可以通过执行命令'MSCK修复‘来同步元数据。

如果从HDFS中删除了许多分区数据,该怎么办(不执行alter table drop partition commad执行)。

如何同步配置单元元数据?

共有1个答案

段干博涉
2023-03-14

编辑:从配置单元3.0.0MSCK开始,现在可以使用以下语法发现新的分区或删除丢失的分区(或两者兼而有之):

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]

这是在HIVE-17824中实现的

正如HakkiBuyukcengiz正确指出的那样,MSCK修复不会在HDFS上的相应文件夹被手动删除时删除分区,它只在创建新文件夹时添加分区。

摘自offical文档:

换句话说,它会将HDFS上存在但metastore中没有的任何分区添加到metastore中。

在存在外部表的情况下,如果在HDFS上手动删除了多个分区文件夹,并且希望快速刷新分区,我通常会这样做:

    null
 类似资料:
  • 我有一个配置单元表,其中一个date列上存在分区,但date列以YYYYMMDD格式存储为INT。该表还可以包含未来日期分区的数据。 现在,作为过程的一部分,我希望删除那些在处理日(位于处理日)上运行的分区。 当我编写drop分区时,比如,那么它工作正常。 考虑到我的输入将是唯一的日期格式YYYY-MM-DD和我已经删除所有分区已给出输入日期-1;如何使上述陈述奏效?

  • 查询示例: 典型错误消息: 处理语句时出错:失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapredTask返回代码2 问题2:当我运行命令?我是否只运行相同的命令,但使用STRING而不是bigint?**完整错误消息:**

  • 插入覆盖表myTable分区(字段)从myTable中选择*,其中机器='xxxxx' 但是SELECT中的数据不会替换MyTable中的数据。

  • 我有一个配置单元外部表,有3个分区列(a,B,C),现在我想从分区中删除B和C列。这样做可能吗?我已经尝试使用Alter table tab_name drop column col_name;---但它会抛出一个错误,说明无法删除分区列。

  • 我有一个外部配置单元表,其中有诸如year=2017,year=2018之类的分区,在它们内部,我还有year=2017和year=2018的每个月的分区。 如果是内部表,会发生什么情况?

  • 我已经根据日期yyyy-mm-dd对配置单元表进行了分区。我想每天运行一个脚本,可以删除所有超过30天的分区,但在这种情况下,我不想超过日期。我希望它采取系统日期和删除超过30天的分区。