Too many items requested for the BatchGetItem call

TL;DR — BatchGetItem が1回の呼び出しで取得できるのは最大100アイテム(かつ 16 MB 以下のデータ)です。100を超えるキーを要求したため、DynamoDB がリクエストを拒否しました。キーを100以下のチャンクに分割し、チャンクごとに BatchGetItem を1回ずつ発行してください。

意味

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 は1つ以上のテーブルにまたがってプライマリキーでアイテムを取得しますが、1回の呼び出しは 100キー と、返されるデータ 16 MB に制限されています。100を超えるキーを要求すると、DynamoDB は呼び出し全体を拒否します。制限内であっても、レスポンスが要求より少ないアイテムしか返さないことがあり(16 MB の上限)、残りは UnprocessedKeys で報告されます。上限超過のケースは HTTP 400 の ValidationException で、サイズを直すまでリトライしても無駄です。

発生する理由

  • 大きなキー集合を1回の呼び出しで要求している — 数百のキーをそのまま BatchGetItem に渡している。
  • チャンクの上限が100を超えている — 件数でバッチ化しているが BatchWrite の25件制限と取り違えている、あるいはオフバイワンで101件が通ってしまう。
  • テーブル数を数えていて、キー数を数えていない — 100の制限はリクエスト内の全テーブルにわたるキーの合計です。
  • UnprocessedKeys をページングしていない — 1回の呼び出しですべて返ると思い込み、そもそもチャンク分割していない。

修正方法

  1. キーを100以下のグループにチャンク分割し、チャンクごとに BatchGetItem を1回送ります。
  2. UnprocessedKeys を処理します — 返ってきたキーは指数バックオフで再試行します。これは有効な100キーのバッチ内でも、16 MB の上限に当たれば発生します。
  3. レスポンスを 16 MB 未満に保ちます — アイテムが大きい場合は、1回あたり100より少ない数を要求します。
  4. SDK が何をしてくれるかを把握します — 低レベルクライアントと JavaScript のドキュメントクライアントは、大きすぎるキーリストを 分割しません。自分で100にチャンク分割する必要があります。一部の高レベルクライアント(Java SDK の Enhanced Client と v1 の DynamoDBMapper)は、少なくとも未処理アイテムを自動で再試行します。

再現方法

上限を1つ超えて、101キーを要求する BatchGetItem です。

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 にも何も入りません。そこが、部分的な結果を返す 16 MB のレスポンス上限超過との違いです。

DynoTable から

デバッグ中は、DynoTable で 1 回あたり 100 件未満のキーをバッチ読み取りしましょう — ⌘K でテーブルを開き、対象のキー集合に絞り込み、コードで分割した BatchGetItem を組む前にアイテムが存在することを確認します。アイテムが大きい場合、アイテムサイズ計算ツールが安全なチャンクサイズを選ぶのに役立ちます。

まずはクエリビルダーで単一キーの読み取りを試作しましょう。プロファイルの切り替えは ⌘P、Settings → Profiles では Test Connection を実行します。AWS に接続するインストールを参照してください。

出典

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

2026-07-26 に DynamoDB Local 2.x と AWS SDK for JavaScript v3.1095.0 で再現しました — 上記の出力はそのままの逐語です。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。