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

数据上传下载限制

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

  • Tunnel Upload命令上传限制
    • Tunnel命令不支持上传下载ARRAY、MAP和STRUCT类型的数据。
    • 上传没有速度限制,上传速度的瓶颈为网络带宽以及服务器性能。
    • 重传有次数的限制,当重传次数超过限制,就会继续上传下一个Block。上传完成后,可以通过select count(*) from table_name语句,检查数据是否有丢失。
    • 一个项目下Tunnel支持并发的连接数默认上限为2000个。
    • 每个Tunnel的Session在服务端的生命周期为24小时,创建后24小时内均可使用,也可以跨进程/线程共享使用,但是必须保证同一个BlockId没有重复使用。
  • DataHub上传数据限制
    • 每个字段的大小不能超过这个字段本身的限制,详情请参见数据类型版本说明
      说明 STRING的长度不能超过8 MB。
    • 上传的过程中,会将多条数据打包成一个Package来进行上传。
  • TableTunnel SDK接口限制
    • BlockId的取值范围是[0, 20000),单个Block上传的数据限制为100 GB。
    • Session的超时时间为24小时。大批量数据传送导致超过24小时,需要自行拆分成多个Session。
    • RecordWriter对应的HTTP Request超时时间为120s。如果120s内HTTP连接上没有数据流过,服务端会主动关闭连接。

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

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。
窗口函数 5个 数量限制 单个SELECT语句中最多允许存在5个窗口函数。
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