一些用户因没注意限制条件,业务启动后才发现限制条件,导致业务停止。为避免此类现象发生,方便用户查看,本文将对 MaxCompute SQL 限制项做以下汇总:
边界名 | 最大值/限制条件 | 分类 | 配置项名称 | 说明 |
表名长度 | 128字节 | 长度限制 | 表名,列名中不能有特殊字符,只能用英文的a-z,A-Z及数字和下划线_,且以字母开头 | |
注释长度 | 1024字节 | 长度限制 | 注释内容是长度不超过1024字节的有效字符串 | |
表的列定义 | 1200个 | 数量限制 | apsara.odps.meta.column.max | 单表的列定义个数最多1200个 |
单表分区数 | 60000 | 数量限制 | apsara.odps.metastore.ots.MaxPartitions | 一张表最多允许60000个分区 |
表的分区层级 | 6级 | 数量限制 | apsara.odps.meta.part.level.max | 在表中建的分区层次不能超过6级 |
表统计定义个数 | 100个 | 数量限制 | 表统计定义个数 | |
表统计定义长度 | 64000 | 长度限制 | apsara.odps.sql.stat.maxlen | 表统计项定义长度 |
屏显 | 10000行 | 数量限制 | SELECT语句屏显默认最多输出10000行 | |
insert目标个数 | 256个 | 数量限制 | apsara.odps.sql.inserts.max | multiins同时insert的数据表数量 |
UNION ALL | 256个表 | 数量限制 | apsara.odps.sql.unioners.max | 最多允许256个表的UNION ALL |
join源 | 16个 | 数量限制 | apsara.odps.sql.maximum.join | join的源表个数最多运行16个 |
MAPJOIN | 8个小表 | 数量限制 | MAPJOIN最多允许8张小表 | |
MAPJOIN内存限制 | 512M | 数量限制 | apsara.odps.analytic.function.maxexprs | MAPJOIN所有小表的内存限制不能超过512M |
窗口函数 | 5个 | 数量限制 | 一个SELECT中最多允许5个窗口函数 | |
ptinsubq | 1000行 | 数量限制 | pt in subquery返回的结果不可超过1000行 | |
sql语句长度 | 2M | 长度限制 | 允许的sql语句的最大长度 | |
wherer子句条件个数 | 256个 | 数量限制 | where子句中可使用条件个数 | |
列记录长度 | 8M | 数量限制 | 表中单个cell的最大长度 | |
in的参数个数 | 1024 | 数量限制 | in的最大参数限制,如in (1,2,3….,1024)。in(…)如果参数过多,会造成编译时的压力;1024是建议值、不是限制值 | |
jobconf.json | 1M | 长度限制 | jobconf.json的大小为1M。当表包含的Partition数量太多时,可能超过jobconf.json超过1M。 | |
视图 | 不可写 | 操作限制 | 视图不可以写,不可用insert操作 | |
列的数据类 | 不允许 | 操作限制 | 不允许修改列的数据类型,列位置 | |
java udf函数 | 不能是abstract或者static | 操作限制 | java udf函数不能是 abstract 或者 static | |
最多查询分区个数 | 10000 | 数量限制 | 最多查询分区个数不能超过10000 |
备注:以上MaxCompute SQL限制项均不可以被人为修改配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute SQL作为阿里云大数据计算服务中的重要组成部分,为确保系统稳定性和作业执行效率,设有一系列的限制条件。您汇总的这些限制项对于用户在设计数据表结构、编写SQL查询语句时具有重要的指导意义,帮助避免因违反限制而导致的错误或性能问题。以下是对这些限制项的一些补充说明和建议:
表名与列名规范:遵循命名规则,使用英文字符、数字及下划线构建表名和列名,并确保以字母开头,可以提升代码的可读性,同时避免因特殊字符引起的解析错误。
注释与文档:虽然注释长度有限制,但合理的注释对于维护长期项目至关重要。可以通过外部文档详细记录复杂的逻辑和设计思路,辅助团队协作。
表设计优化:考虑到列定义、分区数、分区层级等限制,合理规划表结构,比如通过合并相关列、减少不必要的分区来优化设计,保持数据模型的高效性。
查询优化:针对SELECT语句输出行数、JOIN操作源表数量、窗口函数数量等限制,可以通过分批查询、优化JOIN策略、减少窗口函数的使用等方式,提高查询效率并避免超出限制。
内存管理:MAPJOIN操作的内存限制要求开发者关注小表的大小和数量,合理利用资源。必要时,考虑预处理数据或调整作业配置以优化内存使用。
代码审查与测试:在开发过程中实施代码审查,特别是对复杂SQL的审查,可以帮助提前发现可能触犯限制条件的地方。同时,进行充分的测试,包括边界条件测试,确保业务逻辑在各种情况下都能正常运行。
监控与报警:利用阿里云提供的监控工具,如DataWorks中的运维中心,设置相应的报警规则,当接近某些限制阈值时自动通知,以便及时调整策略。
文档与培训:定期回顾和分享这些限制信息给团队成员,尤其是新加入的成员,通过内部培训增强团队对MaxCompute最佳实践的理解和应用。
记住,虽然这些限制是固定的,但通过良好的设计和编码习惯,完全可以构建出既符合规范又高效的数据处理流程。如果在实际应用中遇到特定场景下的挑战,也可以考虑是否能通过其他阿里云产品或服务(如DataWorks的数据开发与调度功能)来辅助解决。