AWS CLI での DynamoDB BatchGetItem

aws dynamodb batch-get-item は、1つのコマンドでプライマリキーによって最大100個のアイテムを取得します(最大16 MB)。キーは --request-items に、テーブル → キーのマップとして DynamoDB JSON で渡します。そして出力の UnprocessedKeys を必ず確認してください。バッチは、要求した内容の一部だけを正当に返すことがあるからです。

Code

aws dynamodb batch-get-item \
  --request-items '{
    "Music": {
      "Keys": [
        {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
        {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
        {"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}
      ]
    }
  }'

出力は各テーブルを、見つかったアイテムと残りにマッピングします。

{
    "Responses": {
        "Music": [
            {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
        ]
    },
    "UnprocessedKeys": {}
}

Explanation

  • --request-items — テーブル名 → {"Keys": [...]} のマップ。1つのコマンドが複数のテーブルにまたがることもできます。各キーは完全なプライマリキー(複合キーならパーティション + ソート)である必要があります。100個を超えるキー、または同じキーが2回あると ValidationException で失敗します。
  • Responses — アイテムは特定の順序なしで返り、存在しないキーは単に現れません。結果はキー属性でリクエストと突き合わせてください。
  • UnprocessedKeysquery/scan とは異なり、CLI は部分的なバッチを自動リトライしません(ページネーショントークンではありません)。マップが空でない場合(スロットリング、16 MB を超えるレスポンスなど)は、その正確なマップを --request-items として再実行し(すでに正しい形式です)、試行の合間にバックオフを入れてください。
  • テーブルごとに "ProjectionExpression": "...""ExpressionAttributeNames" とともに)を追加して一部の属性だけを取得したり、強い整合性のある読み取りには "ConsistentRead": true を指定できます。バッチ読み取りはデフォルトで結果整合性です。
  • ヒント: キーが数個を超える場合は、マップをファイルに保持して --request-items file://keys.json を渡しましょう。

Do it visually

シェルのクォート内で入れ子の DynamoDB JSON を手書きするのはミスを招きます。DynamoDB Expression Builder は型付きのキー/値マップを構築し、すぐに実行できる CLI コマンドをコピーします。

複数のテーブルにまたがってアイテムを GUI で取得・確認するには(JSON エスケープなし、再実行の管理なし)、DynoTable をダウンロードしてください。

References

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

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。