如何为多分区列Hive外部表仅指定单个列添加分区?
Hive分区添加问题解答
结论
不能仅指定dt这一个分区列完成标准的手动分区添加操作。
原因说明
Hive的分区采用严格的层级映射规则:
- 你定义的
transaction_copy表共有3个顺序排列的分区列:dt、year、transaction_type_code,对应HDFS存储路径的层级结构为dt=xxx/year=xxx/transaction_type_code=xxx - Hive在校验分区添加语句时,要求分区声明必须包含全部分区列的取值,才能唯一确定一个分区和对应存储路径的映射关系,缺少任意分区列都会触发语义校验失败,也就是你遇到的报错。
替代方案
如果你需要批量注册指定dt下的所有子分区,不需要手动逐个指定全部分区列的值,可以使用Hive自带的元数据修复命令:
MSCK REPAIR TABLE transaction_copy;
该命令会自动扫描表指定的LOCATION路径下所有符合分区键=值命名规范的子路径,自动将缺失的分区元数据批量注册到Hive元数据中,无需手动指定全部分区列取值。
注意:该方案生效的前提是HDFS上已经存在符合三层分区命名规范的子路径,如果实际存储路径不符合Hive默认分区命名规则,仍需手动指定全部分区列完成分区添加。
内容的提问来源于stack exchange,提问作者Manoj Kumar Dhakad
相关产品推荐
相关产品推荐

