在使用MaxCompute前,建议您先了解产品相关使用限制,确保业务可顺利开展。本文为您介绍使用MaxCompute过程中的操作限制。

数据上传下载限制

在MaxCompute中上传下载数据时的使用限制如下:

  • 批量数据通道使用限制说明
    • 批量数据上传
      • UploadSession生命周期:24小时。
      • 单UploadSession写入Block个数:20000个。
      • 单Block写入速度:10 MB/s。
      • 单Block写入数据量:100 GB。
      • 单表创建UploadSession数:每5分钟500个。
      • 单表写入Block数:每5分钟500个。
      • 单表并发提交UploadSession数:32个。
      • 并发写入Block数:受Slot并发数限制,单次Block写入占用一个Slot。
    • 批量数据下载
      • DownloadSession生命周期:24小时。
      • InstanceDownloadSession生命周期:24小时,受实例生命周期限制。
      • 单Project创建InstanceDownloadSession数:每5分钟200个。
      • 单表创建DownloadSession数:每5分钟200个。
      • 单次下载请求速度:10MB/s。
      • 并发创建DownloadSession数:受Slot并发数限制,单次创建DownloadSession占用一个Slot。
      • 并发创建InstanceDownloadSession数:受Slot并发数限制,单次创建InstanceDownloadSession占用一个Slot。
      • 并发下载请求数:受Slot并发数限制,单次数据下载请求占用一个Slot。
  • 流式数据通道使用限制说明
    • 单Slot写入速度:1MB/s。
    • 单Slot写入请求数:每秒10个。
    • 单表并发写入分区数:64个。
    • 单分区最大可用Slot数:32个。
    • StreamUploadSession占用Slot数:受并发Slot并发数限制,创建StreamUploadSession时指定Slot数。
  • DataHub上传数据限制
    • 每个字段的大小不能超过这个字段本身的限制,详情请参见数据类型版本说明
      说明 STRING的长度不能超过8 MB。
    • 上传的过程中会将多条数据打包成一个Package进行上传。

更多数据上传下载信息,请参见数据上传下载

SQL限制

在MaxCompute中开发SQL作业时的使用限制如下。

限制项 最大值/限制条件 分类 说明
表名长度 128字节 长度限制 表名、列名中不能有特殊字符,以字母开头,且只能用英文小写字母(a-z)、英文大写字母(A-Z)、数字和下划线(_)。
注释长度 1024字节 长度限制 长度不超过1024字节的有效字符串。
表的列定义 1200个 数量限制 单表的列定义个数最多为1200个。
单表分区数 60000个 数量限制 单表的分区个数最多为60000个。
表的分区层级 6级 数量限制 在表中创建的分区层次不能超过6级。
屏显 10000行 数量限制 SELECT语句屏显最多输出10000行。
INSERT目标个数 256个 数量限制 MULTI-INSERT场景,目标表的数量限制为256个。
UNION ALL 256个 数量限制 UNION ALL场景,最多允许合并256个表。
MAPJOIN 128个 数量限制 MAPJOIN场景,最多允许连接128个小表。
MAPJOIN内存限制 512 MB 数量限制 MAPJOIN场景,所有小表的内存不能超过512 MB。
ptinsubq 1000行 数量限制 子查询中存在分区列时,子查询的返回结果不能超过1000行。
SQL语句长度 2 MB 长度限制 SQL语句的最大长度为2 MB。包括您使用SDK调用SQL的场景。
WHERE子句条件个数 256个 数量限制 WHERE子句中的条件个数最大为256个。
列记录长度 8 MB 数量限制 表中单个单元的最大长度为8 MB。
IN的参数个数 1024 数量限制 IN的最大参数限制,例如in (1,2,3….,1024)。如果in(…)的参数过多,会影响编译性能。1024为建议值,不是限制值。
jobconf.json 1 MB 长度限制 jobconf.json的大小为1 MB。当表包含的分区数量较多时,大小可能超过jobconf.json,超过1 MB。
视图 不可写 操作限制 视图不支持写入,不支持INSERT操作。
列的数据类型 不可修改 操作限制 不允许修改列的数据类型及列位置。
Java UDF函数 不允许为ABSTRACT或者STATIC 操作限制 Java UDF函数不能为ABSTRACTSTATIC
最多查询分区个数 10000个 数量限制 最多查询分区个数不能超过10000个。
SQL执行计划长度 1 MB 长度限制 MaxCompute SQL生成的执行计划不能超过1 MB,否则会触发FAILED: ODPS-0010000:System internal error - The Size of Plan is too large报错。

更多SQL信息,请参见SQL

MapReduce限制

在MaxCompute中开发MapReduce作业时的使用限制如下。

边界名 边界值 分类 配置项名称 默认值 是否可配置 说明
Instance内存占用 [256 MB,12 GB] 内存限制 odps.stage.mapper(reducer).memodps.stage.mapper(reducer).jvm.mem 2048 MB+1024 MB 单个Map Instance或Reduce Instance占用Memory,有框架Memory(默认2048 MB)和JVM的Heap Memory(默认1024 MB)两部分。
Resource数量 256个 数量限制 - 单个Job引用的Resource数量不超过256个,Table、Archive按照一个单位计算。
输入路数和输出路数 1024个和256个 数量限制 - 单个Job的输入路数不能超过1024(同一个表的一个分区算一路输入,总的不同表个数不能超过64个),单个Job的输出路数不能超过256。
Counter数量 64个 数量限制 - 单个Job中自定义Counter的数量不能超过64,Counter的Group Name和Counter Name中不能带有井号(#),两者长度和不能超过100。
Map Instance [1,100000] 数量限制 odps.stage.mapper.num 单个Job的Map Instance个数由框架根据Split Size计算得出,如果没有输入表,可以通过odps.stage.mapper.num直接设置,最终个数范围[1,100000]。
Reduce Instance [0,2000] 数量限制 odps.stage.reducer.num 单个Job默认Reduce Instance个数为Map Instance个数的1/4,用户设置作为最终的Reduce Instance个数,范围[0,2000]。可能出现这样的情形:Reduce处理的数据量会比Map大很多倍,导致Reduce阶段比较慢,而Reduce只能最多2000。
重试次数 3 数量限制 - 单个Map Instance或Reduce Instance失败重试次数为3,一些不可重试的异常会直接导致作业失败。
Local Debug模式 Instance个数不超100 数量限制 -
Local Debug模式下:
  • 默认Map Instance个数为2,不能超过100。
  • 默认Reduce Instance个数为1,不能超过100。
  • 默认一路输入下载记录数100,不能超过10000。
重复读取Resource次数 64次 数量限制 - 单个Map Instance或Reduce Instance重复读一个Resource次数限制<=64次。
Resource字节数 2 GB 长度限制 - 单个Job引用的Resource总计字节数大小不超过2 GB。
Split Size 大于等于1 长度限制 odps.stage.mapper.split.size 256 MB 框架会参考设置的Split Size值来划分Map,决定Map的个数。
STRING列内容长度 8 MB 长度限制 - MaxCompute表STRING列内容长度不允许超出限制。
Worker运行超时时间 [1,3600] 时间限制 odps.function.timeout 600 Map或者Reduce Worker在无数据读写且没有通过context.progress()主动发送心跳的情况下的超时时间,默认值是600s。
MapReduce引用Table资源支持的字段类型 BIGINT、DOUBLE、STRING、DATETIME、BOOLEAN 数据类型限制 - MapReduce任务引用表资源时,若表字段有其他类型字段执行报错。
MapReduce是否支持读取OSS数据 - 功能限制 - MapReduce不支持读取OSS数据。
MapReduce是否支持MaxCompute 2.0新类型 - 功能限制 - MapReduce不支持MaxCompute 2.0新类型。

更多MapReduce信息,请参见MapReduce

PyODPS限制

在MaxCompute中基于DataWorks开发PyODPS作业时的使用限制如下:

  • PyODPS节点获取本地处理的数据不能超过50 MB,节点运行时占用内存不能超过1 GB,否则节点任务会被系统中止。请避免在PyODPS任务中写额外的Python数据处理代码。
  • 在DataWorks上编写代码并进行调试效率较低,为提升运行效率,建议本地安装IDE进行代码开发。
  • 在DataWorks上使用PyODPS时,为了防止对DataWorks的Gate Way造成压力,对内存和CPU都有限制,该限制由DataWorks统一管理。如果您发现有Got killed报错,即表明内存使用超限,进程被中止。因此,请尽量避免本地的数据操作。通过PyODPS发起的SQL和DataFrame任务(除to_pandas外)不受此限制。
  • 由于缺少matplotlib等包,如下功能可能受限:
    • DataFrame的plot函数。
    • DataFrame自定义函数需要提交到MaxCompute执行。由于Python沙箱限制,第三方库只支持所有的纯粹Python库以及Numpy,因此不能直接使用Pandas。
    • DataWorks中执行的非自定义函数代码可以使用平台预装的Numpy和Pandas。不支持其他带有二进制代码的三方包。
  • 由于兼容性原因,在DataWorks中,options.tunnel.use_instance_tunnel默认设置为False。如果需要全局开启instance tunnel,需要手动将该值设置为True。
  • 由于实现的原因,Python的atexit包不被支持,请使用try-finally结构实现相关功能。

更多PyODPS信息,请参见PyODPS

Graph限制

在MaxCompute中开发Graph作业时的使用限制如下:

  • 单个Job引用的Resource数量不超过256个,Table、Archive按照一个单位计算。
  • 单个Job引用的Resource总计字节数大小不超过512 MB。
  • 单个Job的输入路数不能超过1024(输入表的个数不能超过64)。单个Job的输出路数不能超过256。
  • 多路输出中指定的Label不能为NULL或者空字符串,长度不能超过256个字符串,只能包括A-Z、a-z、0-9、下划线(_)、井号(#)、英文句点(.)和短划线(-)。
  • 单个Job中自定义Counter的数量不能超过64个。Counter的group namecounter name中不能带有井号(#),两者长度和不能超过100。
  • 单个Job的Worker数由框架计算得出,最大为1000个,超过抛异常。
  • 单个Worker占用CPU默认为200个,范围为[50,800]。
  • 单个Worker占用Memory默认为4096 MB,范围为[256 MB,12 GB]。
  • 单个Worker重复读一个Resource次数限制不大于64次。
  • split_size默认为64 MB,您可自行设置,范围为0<split_size≤(9223372036854775807>>20)。
  • MaxCompute Graph程序中的GraphLoader、Vertex、Aggregator等在集群运行时,受到Java沙箱的限制(Graph作业的主程序则不受此限制),具体限制请参见Java沙箱

更多Graph信息,请参见Graph

其他限制

各地域下的单个MaxCompute项目支持同时提交的作业数量限制如下。

地域 单个MaxCompute项目作业并发上限
华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、西南1(成都) 2500
中国香港、新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、美国(硅谷)、美国(弗吉尼亚)、英国(伦敦)、印度(孟买)、阿联酋(迪拜) 300

如果MaxCompute项目提交的作业已经达到上限,继续提交作业会返回报错。错误信息示例:com.aliyun.odps.OdpsException: Request rejected by flow control. You have exceeded the limit for the number of tasks you can run concurrently in this project. Please try later

共享资源说明

下表数据为不同区域下免费共享资源(单位:Slot)Project级最多可用Slot数说明。
Region 城市 Slot(个数)
中国 华东1(杭州) 300
中国 华东2(上海) 600
中国 华东2金融云(上海) 50
中国 华北2(北京) 300
中国 华北2政务云(北京) 100
中国 华北3(张家口) 300
中国 华南1(深圳) 150
中国 华南1金融云(深圳) 50
中国 西南1(成都) 150
中国 中国(香港) 50
亚太 新加坡 100
亚太 澳大利亚(悉尼) 50
亚太 马来西亚(吉隆坡) 50
亚太 印度尼西亚(雅加达) 50
亚太 日本(东京) 50
欧洲与美洲 德国(法兰克福) 50
欧洲与美洲 美国(硅谷) 100
欧洲与美洲 美国(弗吉尼亚) 50
欧洲与美洲 英国(伦敦) 50
中东与印度 印度(孟买) 50
中东与印度 阿联酋(迪拜) 50
说明 如您有临时高资源使用需求,可提工单申请临时上调Slot数,系统会根据可用资源情况确认是否通过工单申请,上调Slot资源可用时间最长不超过一周。