You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Athena无where条件select *报单行超32MB错,带where正常原因问询

AWS Athena Parquet查询32MB行大小限制问题解答

Athena底层基于Presto引擎实现,默认设定单条记录(含所有列序列化后的总大小)最大不能超过32MB,该限制为服务端硬限制,不可自行调整。

问题1:不带where条件的查询触发报错、带where条件查询正常的原因

你的表中存在至少一条满足col1 is null的记录,该记录的总大小超过32MB:

  • 执行select * from tableName时会扫描全表所有行,读到这条超限记录时直接触发大小校验报错
  • 执行select * from tableName where col1 is not null时,Parquet列存的谓词下推能力会先过滤掉所有col1 is null的行,这些行的完整字段数据不会被读取、也不会进入大小校验环节,因此查询可以正常返回

问题2:两条查询的后台执行逻辑差异

  • 谓词下推逻辑差异
    • 无过滤条件的查询:没有谓词下推动作,引擎会读取目标表对应所有Parquet文件的全量列、全量行数据,拼装成完整记录后返回
    • 带col1 is not null过滤的查询:过滤条件会下推到Parquet文件扫描层,引擎首先仅读取所有Parquet文件中col1列的存储块,筛选出符合col1 is not null的行索引,之后仅读取这些行索引对应的其他列数据拼装返回
  • 大小校验范围差异
    • 无过滤条件的查询:全表所有行都会被拼装完成并触发32MB大小校验,只要有一行超限就立即终止查询返回报错
    • 带过滤条件的查询:仅通过过滤条件的行才会完成拼装并触发大小校验,被过滤的行不会进入校验环节
  • IO读取量差异
    • 无过滤条件的查询:读取数据量等于全表总存储大小
    • 带过滤条件的查询:仅读取过滤列+符合条件行的其他列数据,实际IO量远小于全表扫描

排查建议

如果需要定位超限行,直接执行select * from tableName where col1 is null即可复现报错,再通过逐步缩小查询字段范围,即可定位到具体超限的字段。

内容的提问来源于stack exchange,提问作者Rahul.bigdata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:57:02