Provided list of item keys contains duplicates (BatchGetItem)
TL;DR — 1つのテーブルに対する BatchGetItem の Keys 配列が、同じプライマリキーを複数回列挙しています。DynamoDB はバッチ内のすべてのキーが一意であることを要求し、リクエスト全体 を拒否します。重複を黙って削除することはしません。送信前にキーリストを重複排除してください。
意味
ValidationException: Provided list of item keys contains duplicatesBatchGetItem はテーブルをまたいで最大100アイテムを読み取ります。1つのテーブルの Keys リスト内では、各エントリは別個のプライマリキー(パーティションキー、または複合テーブルではパーティション + ソートキー)である必要があります。同じキーに解決される2つのエントリはこの HTTP 400 ValidationException を引き起こし、呼び出し全体が失敗します。アイテムは返されません。そのままでは リトライ不可 です。
発生する理由
- リスト内に 同じキーが2回現れる — 多くの場合、ID が複数のソースから収集され、マージされなかったため。
- ソースに重複行があった 生成されたキーリスト(例: レコードのリストをキーにマッピング)。
- 複合キーの混乱 — 2つのエントリがパーティションキーを共有するが、ソートキーが異なることを忘れた、あるいは両方が本当に同一である。
- 実際の重複を隠す 大文字小文字 / 型の違い — 同じ値にマーシャルされる2つのキー。
- 重複排除ステップなしにキーをバッチ化するロードパイプライン(Glue、カスタム ETL)。
修正方法
- 呼び出し前に重複排除します。 各エントリを安定した文字列でキー化し、1つだけ保持します:
const seen = new Set(); const keys = raw.filter((k) => { const id = `${k.pk.S}#${k.sk?.S ?? ''}`; if (seen.has(id)) return false; seen.add(id); return true; }); - バッチはバッグではなくセットであることを忘れないでください — キーごとに読み取りは1回で十分です。アイテムは関係なく1回返ってきます。
BatchGetItemごとに100キーへチャンク分割 し、レスポンス内のUnprocessedKeysを処理します(重複ではなくスロットリング)。- ETL/ローダーを同じ重複排除でガード し、上流で問題が再発しないようにします。
手作業でバッチを読み取り、送信するキーを正確に確認したいですか?DynoTable デスクトップアプリ はアイテムをキー別に表示するため、作業セット内の偶発的な重複が見つけやすくなります。
DynoTable での手順
本番からキーをバッチ読み取りする前に、DynoTable で重複を見つけましょう — ⌘K でテーブルを開き、取得予定の ID に絞り込み、それぞれのプライマリキーが 1 回しか現れないことを確かめます。アイテム一覧はパーティションキーとソートキーを並べて表示するので、複合キーの衝突がひと目で分かります。
読み取りをコードに移すときは、まずクエリビルダーで単一キーの読み取りを試作し、それから分割した BatchGetItem に広げましょう。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行い、Test Connection を実行します。AWS に接続するとインストールを参照してください。
出典
- BatchGetItem — Amazon DynamoDB API Reference (2026-07-13 時点で検証)
- Error handling with DynamoDB (2026-07-13 時点で検証)
関連するエラー
- Provided list of item keys contains duplicates (BatchWriteItem) — 書き込み側の同じルール。
- ValidationException (overview)
- Code example: BatchGetItem in Node.js — 適応可能な正しいチャンク化バッチ読み取り。
- 学習: バッチ操作
参考資料
- BatchGetItem — Amazon DynamoDB API Reference
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。