Too many items requested for the BatchGetItem call

TL;DR — BatchGetItem 每次调用最多取回 100 个项目(且不超过 16 MB 数据)。你请求了超过 100 个键,所以 DynamoDB 拒绝了这个请求。把你的键切成不超过 100 个一组,每组发一次 BatchGetItem

含义

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

BatchGetItem 按主键跨一张或多张表取回项目,但单次调用被限制在 100 个键16 MB 返回数据。请求超过 100 个,DynamoDB 就会拒绝整个调用。即便在限额之内,一次响应返回的项目也可能比你要的少(因为 16 MB 上限),剩下的会在 UnprocessedKeys 中报告出来。超限这种情况是 HTTP 400 ValidationException,在改小之前不可重试。

为什么会发生

  • 一次调用里请求了一大批键——把几百个键直接塞进 BatchGetItem
  • 分组上界高于 100——按数量分批时误用了 BatchWrite 那边 25 个项目的限制,或者一个差一错误放了 101 个进去。
  • 数的是表,不是键——100 这个限制是请求中所有表的键总数。
  • 没有对 UnprocessedKeys 分页——以为一次调用就能返回全部,于是从不分组。

如何修复

  1. 把键切成 ≤100 个一组,每组发一次 BatchGetItem
  2. 处理 UnprocessedKeys——用指数退避重试返回的那些键;即使在一个合法的 100 键批次内,撞上 16 MB 上限时也会发生这种情况。
  3. 让响应保持在 16 MB 以内——项目较大时,每次调用请求少于 100 个。
  4. 搞清楚你的 SDK 替你做了什么——底层客户端和 JavaScript 的 document client 不会拆分过长的键列表;你必须自己切到 100。某些上层客户端(Java SDK 的 Enhanced Client 和 v1 的 DynamoDBMapper)至少会自动重试未处理的项目。

复现方法

A BatchGetItem 要求 101 个钥匙,其中一把超出上限:

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

实际输出:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

这个在请求形状上很快就失败了——没有发生部分读取,并且没有任何内容落在 UnprocessedKeys 中。这就是超过 100 个键限制和超过 16 MB 响应限制之间的区别,后者确实返回部分结果。

从 DynoTable

调试时,在 DynoTable 中一次批量读取少于 100 个键 — 使用 ⌘K 打开表,过滤到键集,并在代码中连接分块 BatchGetItem 之前确认项目存在。当项目很大时,item size calculator有助于选择安全的块大小。首先使用 Query Builder 构建单键读取原型。使用 ⌘P 切换配置文件; 在“设置”→“配置文件”上测试连接。参见连接 AWS安装

来源

相关错误

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

2026-07-26 针对 DynamoDB Local 2.x 与 AWS SDK for JavaScript v3.1095.0 复现——上方输出为原样照录。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。