ODPS-0123031

本文为您介绍错误码ODPS-0123031:ODPS partition exception的报错场景,并提供对应的解决方案。

错误1:maximum 60000 partitions allowed

错误信息示例

ODPS-0123031:ODPS partition exception - maximum 60000 partitions allowed

错误描述

每张MaxCompute的分区表最多允许存在 60000 个分区,此限制无法调整。

解决方案

当某张表超出 60000 个分区时,你可以通过以下方式解决:

1)通过设置表生命周期,系统自动删除过期的分区数据与分区,详情请参考生命周期操作

2)您可以合并历史分区数据,例如把历史一个的数据合并成一个分区,详情可以参考合并分区

3)您可以通过拆表,把历史分区数据备份到备份表,把历史分区从当前表删除,请参考删除分区

错误2:a single instance cannot output data to more than 10000 partitions

错误信息示例

ODPS-0123031:Partition exception - a single instance cannot output data to more than 10000 partitions

错误描述

在INSERT INTO或INSERT OVERWRITE操作时,虽然单个MaxCompute表允许有6万个分区,但是单个作业涉及的输出表分区数量只允许有10000个。出现这个错误,通常是因为分区字段设置有误,例如根据ID字段分区造成分区过多。

解决方案

一般作业输出动态分区数达到几千已经很大,超过10000可能存在业务逻辑或SQL语法问题。如无逻辑或语法问题,建议修改分区表的分区字段,或将业务逻辑拆分为多个作业,避免出现该错误。

错误3:invalid dynamic partition value

错误信息示例

ODPS-0123031:Partition exception - invalid dynamic partition value: province=上海

错误描述

执行插入动态分区操作时,使用了非法的动态分区。动态分区是根据指定字段进行分区,不支持特殊字符和中文动态分区字段。

解决方案

插入动态分区时,需要注意如下情况:

  • 在分布式环境下执行插入动态分区操作时,单个进程最多只能输出512个动态分区。

  • 任意动态分区SQL不允许生成超过2000个动态分区。

  • 动态生成的分区值不允许为NULL。

  • 如果目标表有多级分区,在执行INSERT操作时,允许指定部分分区为静态,但是静态分区必须是高级分区。

错误4:java.lang.ClassNotFoundException:com.aliyun.odps.hive.wrapper.HiveInputFormatWrapper

错误信息示例

ODPS-0123131:User defined function exception - internal error - Fatal Error Happended

java.lang.RuntimeException: java.lang.ClassNotFoundException: com.aliyun.odps.hive.wrapper.HiveInputFormatWrapper

错误描述

使用到了Hive相关的解析器,但没有打开Hive兼容开关,导致报错。

解决方案

执行以下命令打开Hive兼容模式:

SET odps.sql.hive.compatible=true;