Too many items requested for the BatchWriteItem call
TL;DR — BatchWriteItem 每次调用最多接受 25 个 put/delete 操作(且合计 ≤16 MB)。你发送了超过 25 个,所以 DynamoDB 拒绝了整个请求。把你的项目拆分成每组不超过 25 个,并为每个分块发起一次 BatchWriteItem。
含义
ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]
# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem call服务会在 <your request> 所在的位置原样回显你整个序列化后的请求——一个 26 个项目的批次大约是 12,000 个字符。
BatchWriteItem 跨一张或多张表批量处理单个的 PutRequest/DeleteRequest 操作——但单次调用被硬性限制在 25 个操作和 16 MB 数据。越过任一限制,DynamoDB 会在写入任何内容之前拒绝整个请求。它是一个 HTTP 400 ValidationException,属于客户端错误,在你调整批次大小之前不可重试。
为什么会发生
- 在一次调用中写入一个大集合——把一个包含数百个项目的数组直接传入
BatchWriteItem而不分块。 - 分块循环的边界不对——按数量分批,却使用了超过 25 的限制,或者一个差一错误让 26 通过了。
- 数的是表而不是操作——25 的限制是请求中所有表的操作总数,而不是每张表。
- 载荷过大——即使操作数 ≤25,只要有任何单个项目超过 400 KB 或请求总量超过 16 MB,整个批次也会被拒绝。
如何修复
- 分块成每组 ≤25 个操作,并为每个分块发送一次
BatchWriteItem。 - 处理
UnprocessedItems——BatchWriteItem可能返回它未处理的项目(限流);用指数退避重试它们。即使在一个有效的 25 项批次中,这也是正常现象。 - 让每个批次保持在 16 MB 以下——项目较大时,你可能每次调用需要少于 25 个。
- 使用一个帮你缓冲的辅助工具——boto3 的
Table.batch_writer()会自动分块写入并重发未处理的项目(Java SDK 的 Enhanced Client / v1 DynamoDBMapper 也会重试未处理的项目)。底层客户端和 JavaScript 文档客户端不会拆分超大的批次。
在 DynoTable 中测量
在批量加载数据之前,抽查 DynoTable 中的项目大小 — 使用 ⌘K 打开示例项目,并确认每个项目大小不超过 400 KB。 item size calculator 估计批量有效负载大小,以便你在加载程序运行之前选择一个安全的块大小。在运行完全导入之前,使用暂存 (⌘S) 测试针对开发表的小批量写入。使用 ⌘P 切换配置文件;在“设置”→“配置文件”下使用“Test Connection”配置它们。参见连接 AWS和安装。
来源
- BatchWriteItem — Amazon DynamoDB API Reference(2026-07-13 验证)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide(2026-07-13 验证)
相关错误
- Too many items requested for the BatchGetItem call——读取侧的限制(100 个项目)。
- Provided list of item keys contains duplicates——同一个键在一次 BatchWriteItem 中出现两次。
- ProvisionedThroughputExceededException——以 UnprocessedItems 形式浮现的限流。
- 代码示例:BatchWriteItem in Node.js · in Python (boto3)——带 UnprocessedItems 重试的分块写入。
- 学习:DynamoDB batch operations
参考资料
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。