Hive如何添加多级分区?MSCK修复及ALTER加分区报错如何解决
Hive分区无法加载到元数据问题解决方案
核心问题原因
- 手动加分区语法错误:多分区字段的表必须在同一个
PARTITION子句中指定所有分区列,拆分多个PARTITION子句属于语法错误 - 分区字段大小写不匹配:Hive元数据中定义的分区字段为全小写
customername,HDFS存储目录使用驼峰格式customerName,HDFS路径大小写敏感,导致MSCK REPAIR TABLE无法自动识别目录结构 - 分区值不匹配:测试添加分区时使用的
date1='2021-09-15'和实际存在的HDFS路径日期2021-09-16不一致
解决方案
方案一:无需修改HDFS目录,手动指定路径添加分区
直接执行以下DDL语句,手动映射分区元数据和实际HDFS路径:
ALTER TABLE customer ADD PARTITION (date1='2021-09-16', customername='xyz') LOCATION '/user/hive/warehouse/test.db/customer/date1=2021-09-16/customerName=xyz';
注意:分区字段要和表定义一致使用全小写
customername,LOCATION参数写实际存在的HDFS路径即可
方案二:修改目录名适配自动扫描,后续可直接用MSCK批量加分区
- 先修改HDFS目录名,和元数据的分区字段大小写保持一致:
hdfs dfs -mv /user/hive/warehouse/test.db/customer/date1=2021-09-16/customerName=xyz /user/hive/warehouse/test.db/customer/date1=2021-09-16/customername=xyz
- 执行自动修复命令扫描所有符合规则的分区:
MSCK REPAIR TABLE customer;
验证操作
执行以下命令验证分区是否添加成功:
-- 查看所有分区 SHOW PARTITIONS customer; -- 验证数据是否可正常查询 SELECT * FROM customer WHERE date1='2021-09-16' AND customername='xyz' LIMIT 10;
内容的提问来源于stack exchange,提问作者vishwajeet Mane
相关产品推荐
相关产品推荐

