首页 > 编程知识 正文

使用MSCK命令修复Hive表分区

时间:2023-05-03 13:37:19 阅读:245915 作者:3198

一、背景

我们平时一般使用:

alter table ${TABLE_NAME} add partition (dt=‘2019-11-11’);
alter table ${TABLE_NAME} drop partition (dt=‘2019-11-11’);

方式增删Hive的分区的.

但有时候会通过以下方式进行数据的录入:

HDFS put/cp命令往表目录下拷贝分区目录,如果目录多,需要执行多条alter语句,非常麻烦。 Sqoop 或 Kettle将数据直接导入至hdfs目录下, 如: /user/hive/warehouse/ods.db/ods_${TABLE_NAME}

因数据直接导入至分区所在位置, 而分区信息并未存储在metastore中, 则无论是对表查询分区list信息, 或是查分区中数据, 都无法查询到.

对于这类问题, Hive提供了一个"Recover Partition"的功能。

具体语法如下:

MSCK REPAIR TABLE table_name;

其执行原理为:
执行该命令后,Hive会检测如果HDFS目录下存在但表的metastore中不存在的partition元信息,更新到metastore中。

二、测试

#当前没有partition元信息hive> show partitions ${TABLE_NAME};OKTime taken: 0.104 seconds#创建两个分区目录hive> dfs -mkdir /user/hive/warehouse/${TABLE_NAME}/dt=2019-11-11;hive> dfs -mkdir /user/hive/warehouse/${TABLE_NAME}/dt=2019-11-12;#使用MSCK修复分区hive> msck repair table ${TABLE_NAME};OKPartitions not in metastore:${TABLE_NAME}:dt=2019-11-11Partitions not in metastore:${TABLE_NAME}:dt=2019-11-12Repair: Added partition to metastore ${TABLE_NAME}:dt=2019-11-11Repair: Added partition to metastore ${TABLE_NAME}:dt=2019-11-12Time taken: 0.286 seconds, Fetched: 2 row(s)#再检查可以发现, 已经成功更新元信息hive> show partitions ${TABLE_NAME};OKdt=2019-11-11dt=2019-11-12Time taken: 0.102 seconds, Fetched: 1 row(s) 相关JIRA:HIVE-874
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
利用JavaScript实现ISO周日历容器云 NodePort 相关参数修改 UK8S

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。