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 INTOINSERT 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;