首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >手动从HDFS中删除分区数据时,如何更新Hive中的分区元数据

手动从HDFS中删除分区数据时,如何更新Hive中的分区元数据
EN

Stack Overflow用户
提问于 2014-01-14 15:43:49
回答 3查看 48.9K关注 0票数 28

自动更新Hive分区表元数据的方式是什么?

如果将新分区数据添加到HDFS (不执行alter table add partition命令)。然后我们可以通过执行命令'msck repair‘来同步元数据。

如果从HDFS中删除了大量分区数据(没有执行alter table drop partition commad ),该怎么办?

同步蜂窝元数据的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-11 21:49:44

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

代码语言:javascript
运行
复制
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 (...),但如果删除了多个分区,这可能会很繁琐。

票数 38
EN

Stack Overflow用户

发布于 2014-02-10 02:14:12

尝试使用

代码语言:javascript
运行
复制
MSCK REPAIR TABLE <tablename>;
票数 17
EN

Stack Overflow用户

发布于 2018-12-05 18:19:28

确保表设置为external,删除所有分区,然后运行表修复:

代码语言:javascript
运行
复制
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;

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21108251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档