AWS CLI ile DynamoDB BatchGetItem
aws dynamodb batch-get-item, tek bir komutta birincil anahtara göre 100'e kadar öğe getirir. Onu komut satırındaki query ve scan'den ayıran iki şey var: anahtarlar, kabuk tırnaklamasından sağ çıkarmanız gereken iç içe DynamoDB JSON'udur ve CLI, UnprocessedKeys'i sizin yerinize boşaltmaz. Sınırlar ve kısmi sonuç kuralları DynamoDB'de toplu işlemler sayfasındadır.
Kod
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"}}
]
}
}'Kısaltılmış hâliyle çıktı, her tabloyu bulunan öğelere artı varsa artakalanlara eşler. Tam birebir çalıştırma sayfanın aşağısındadır:
{
"Responses": {
"Music": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
]
},
"UnprocessedKeys": {}
}Açıklama
- CLI'nin bu komut için sayfalama mekanizması yoktur.
aws dynamodb query help,--starting-token,--max-itemsve--page-sizeseçeneklerini listeler;aws dynamodb batch-get-item helpüçünün hiçbirini listelemez.UnprocessedKeysbir sayfalama belirteci değildir ve CLI çağrıyı tek seferlik sayar; dolayısıyla onu boşaltmak bir bayrağın değil, sizin kabuk döngünüzün işidir. - Artakalan eşleme zaten girdi biçimindedir. Boş olmayan bir
UnprocessedKeys, hiçbir yeniden şekillendirmeye gerek kalmadan doğrudan--request-itemsolarak geri beslenebilir; bash'te birwhiledöngüsünü katlanılabilir kılan da budur. Denemeler arasında uyuyun; hemen yeniden çalıştırma aynı kısıtlanmış bölüme çarpar. ProjectionExpressionveConsistentRead, tablo başına nesnenin içine,"Keys"ile yan yana gider. Bunları--request-items'ın en üst düzeyine koymak buradaki en yaygın biçim hatasıdır.- Eşlemeyi bir dosyada tutun.
--request-items file://keys.jsonkabuk tırnaklamasını tamamen aradan çıkarır ve birkaç anahtarı geçtiğinizde tek makul seçenektir. Ayrıca 100 anahtar tavanına fark etmeden çarpmanın da yoludur.
Komutun gerçekte ne yazdırdığı
Yukarıdaki blok, üç şarkının da mevcut olduğu DynamoDB Local 3.3.0'a karşı birebir çalıştırıldı (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": {}
}(Öznitelik eşlemeleri her biri tek satıra katlandı; geri kalan her şey yazdırıldığı gibidir.) Komut önce Cubano Chant'i istedi ve onu en son aldı. Yanıtın hiçbir yanı konumsal değildir; dolayısıyla .Responses.Music[0] indekslemesi yapan bir jq ifadesi, hizmetin canı hangisini önce döndürmek istediyse onu okuyor demektir. Bunun yerine anahtar özniteliklerine göre filtreleyin.
Doğrudan reddettiği iki istek, çıkış durumu 254 ile stderr'e yazdırılır:
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 callaws: [ERROR]: öneki CLI v2 sarmalayıcısıdır; ondan sonraki metin hizmetin kendi mesajıdır. Sıfır olmayan her çıkışı kısıtlama sayan bir yeniden deneme döngüsü bunların ikisinde de sonsuza dek döner; dolayısıyla geri çekilmeden önce mesaja göre dallanın.
O iç içe JSON'u tek tırnak içinde elle yazmak, hataların çoğunun kaynağıdır. DynamoDB Expression Builder, tipli anahtar eşlemeleri kurar ve çalıştırmaya hazır bir komut kopyalar; bu da en azından tırnaklamayı şüpheliler listesinden çıkarır.
Bir anahtar kümesini geri okuyup öğeleri JSON gidiş-dönüşü olmadan görmek için DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB BatchGetItem — AWS SDK v3 ile aynı toplu okuma.
- Python'da DynamoDB BatchGetItem — boto3 ile aynı toplu okuma.
- AWS CLI ile DynamoDB GetItem — bunun topladığı tek öğelik okuma.
- DynamoDB'de toplu işlemler — sınırlar, kısmi başarısızlık ve toplu işlem ne zaman kazandırır.
- "Too many items requested for the BatchGetItem call" — tek istekte 100'den fazla anahtar.
- "Provided list of item keys contains duplicates" — tek toplu işlemde aynı anahtardan iki tane.
Kaynaklar
- BatchGetItem — Amazon DynamoDB API Reference
- batch-get-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.