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 helpmendaftarkan--starting-token,--max-itemsdan--page-size;aws dynamodb batch-get-item helptidak mendaftarkan satu pun dari ketiganya.UnprocessedKeysbukan 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.
UnprocessedKeysyang tidak kosong bisa langsung disuapkan kembali sebagai--request-itemstanpa dibentuk ulang, dan itulah yang membuat loopwhiledi bash jadi tertahankan. Beri jeda antar percobaan; menjalankan ulang seketika akan menghantam partisi yang di-throttle yang sama. ProjectionExpressiondanConsistentReadberada di dalam objek per tabel, bersebelahan dengan"Keys". Menaruhnya di level teratas--request-itemsadalah kesalahan bentuk paling umum di sini.- Simpan map itu dalam sebuah file.
--request-items file://keys.jsonsepenuhnya 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 callAwalan 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
- DynamoDB BatchGetItem di Node.js — pembacaan batch yang sama dengan AWS SDK v3.
- DynamoDB BatchGetItem di Python — pembacaan batch yang sama dengan boto3.
- DynamoDB GetItem dengan AWS CLI — pembacaan satu item yang di-batch di sini.
- Operasi batch di DynamoDB — batas, kegagalan parsial, dan kapan batching membuahkan hasil.
- "Too many items requested for the BatchGetItem call" — lebih dari 100 key dalam satu permintaan.
- "Provided list of item keys contains duplicates" — key yang sama dua kali dalam satu batch.
Referensi
- BatchGetItem — Amazon DynamoDB API Reference
- batch-get-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.