DynamoDB BatchGetItem dengan AWS CLI

aws dynamodb batch-get-item mengambil hingga 100 item berdasarkan primary key dalam satu perintah. Dua hal membedakannya dari query dan scan di baris perintah: key-nya adalah DynamoDB JSON bersarang yang harus selamat dari quoting shell, dan CLI tidak akan menguras UnprocessedKeys untuk Anda. Batas dan aturan hasil parsialnya ada di operasi batch di DynamoDB.

Kode

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"}}
      ]
    }
  }'

Secara ringkas, keluarannya memetakan setiap tabel ke item yang ditemukan plus sisa yang belum terproses. Jalannya secara utuh dan apa adanya ada lebih jauh di halaman ini:

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

Penjelasan

  • CLI tidak punya mekanisme paginasi untuk perintah ini. aws dynamodb query help mendaftarkan --starting-token, --max-items dan --page-size; aws dynamodb batch-get-item help tidak mendaftarkan satu pun dari ketiganya. UnprocessedKeys bukan token paginasi dan CLI memperlakukan panggilan itu sebagai sekali jalan, jadi mengurasnya adalah tugas loop shell Anda, bukan sebuah flag.
  • Map sisa itu sudah berformat input. UnprocessedKeys yang tidak kosong bisa langsung disuapkan kembali sebagai --request-items tanpa dibentuk ulang, dan itulah yang membuat loop while di bash jadi tertahankan. Beri jeda antar percobaan; menjalankan ulang seketika akan menghantam partisi yang di-throttle yang sama.
  • ProjectionExpression dan ConsistentRead berada di dalam objek per tabel, bersebelahan dengan "Keys". Menaruhnya di level teratas --request-items adalah kesalahan bentuk paling umum di sini.
  • Simpan map itu dalam sebuah file. --request-items file://keys.json sepenuhnya menghindari quoting shell, dan itu satu-satunya pilihan waras begitu Anda melewati segelintir key. Itu juga cara Anda menyentuh plafon 100 key tanpa sadar.

Apa yang sebenarnya dicetak perintah ini

Fence di atas, dijalankan apa adanya terhadap DynamoDB Local 3.3.0 dengan ketiga lagu tersedia (aws-cli/2.36.9):

{
    "Responses": {
        "Music": [
            {
                "Artist": {"S": "Arturo Sandoval"},
                "AlbumTitle": {"S": "Danzon"},
                "Year": {"N": "1994"},
                "SongTitle": {"S": "A Mis Abuelos"}
            },
            {
                "Artist": {"S": "Ella Fitzgerald"},
                "AlbumTitle": {"S": "Ella in Berlin"},
                "Year": {"N": "1960"},
                "SongTitle": {"S": "Misty"}
            },
            {
                "Artist": {"S": "Arturo Sandoval"},
                "AlbumTitle": {"S": "Danzon"},
                "Year": {"N": "1994"},
                "SongTitle": {"S": "Cubano Chant"}
            }
        ]
    },
    "UnprocessedKeys": {}
}

(Setiap map atribut dilipat jadi satu baris; selebihnya persis seperti yang tercetak.) Perintah itu meminta Cubano Chant lebih dulu dan menerimanya paling akhir. Tidak ada bagian respons yang bersifat posisional, jadi ekspresi jq yang mengindeks .Responses.Music[0] sedang membaca item mana pun yang kebetulan dikembalikan layanan lebih dulu. Filter berdasarkan atribut key saja.

Dua permintaan ditolak mentah-mentah, dicetak ke stderr dengan status keluar 254:

aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Provided list of item keys contains duplicates
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Too many items requested for the BatchGetItem call

Awalan aws: [ERROR]: berasal dari wrapper CLI v2; teks setelahnya adalah pesan layanan itu sendiri. Loop percobaan ulang yang memperlakukan setiap status keluar bukan-nol sebagai throttling akan berputar selamanya pada salah satu dari keduanya, jadi bercabanglah berdasarkan pesannya sebelum menerapkan backoff.

Menulis tangan JSON bersarang itu di dalam tanda kutip tunggal adalah sumber sebagian besar kesalahan. DynamoDB Expression Builder merakit map key bertipe dan menyalin perintah siap jalan, yang setidaknya mencoret quoting dari daftar tersangka.

Untuk membaca kembali sekumpulan key dan melihat item-nya tanpa perjalanan bolak-balik JSON, unduh DynoTable.

Contoh terkait

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.