本文为您介绍错误码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;