Segment must be less than TotalSegments
TL;DR — Bir paralel Scan'de, her işçi Segment (dilim indeksi) ve TotalSegments (kaç dilim) ayarlar. DynamoDB 0 ≤ Segment < TotalSegments gerektirir ve ikisi birlikte sağlanmalıdır. TotalSegments'e eşit veya üzerinde bir Segment reddedilir. Her işçiye 0'dan TotalSegments − 1'e kadar ayrı bir Segment atayın.
Ne anlama gelir
ValidationException: The Segment parameter is zero-based and must be less than parameter TotalSegments: Segment: 5 is not less than TotalSegments: 2
# on DynamoDB Local the same call reports the constraint generically instead:
ValidationException: 1 validation error detected: Value '5' at 'segment' failed to satisfy constraint: Member must have value less than or equal to 1Bir paralel tarama, tabloyu TotalSegments dilime böler; her işçi Segment ile tanımlanan bir dilimi tarar. Geçerli Segment değerleri 0 ile TotalSegments − 1 arasındadır. TotalSegments'in kendisi 1 ile 1.000.000 arasında olmalıdır. Birini diğeri olmadan ya da aralık dışında bir Segment sağlarsanız, DynamoDB çağrıyı reddeder. Parametreler geçerli olana kadar istemci tarafında, yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.
Neden olur
- Bir-eksik segment ataması —
TotalSegments = 4ile,0..3yerine1..4Segmentdeğerlerini kullanmak. - Segment ≥ TotalSegments — dilim sayısını karşılayan ya da aşan bir işçi indeksi.
- Çiftin yalnızca biri sağlanmış —
TotalSegmentsolmadanSegment(ya da tersi) iletmek; bir paralel tarama için ikisi de gereklidir. - Dinamik bir işçi havuzu uyuşmazlığı —
TotalSegments, gerçekte başlatılan işçi sayısından farklı bir değere ayarlanmış, dolayısıyla bazı işçiler aralık dışı indeksler alır.
Nasıl düzeltilir
0'danTotalSegments − 1'e kadar segmentler atayın — işçi başına bir ayrıSegment.- Her paralel-tarama isteğinde her zaman her iki parametreyi de birlikte iletin.
TotalSegments'i işçi sayısına eşit ve1..1.000.000içinde tutun (birTotalSegments1, yalnızca sıralı bir taramadır).- Bir işçinin sıra numarasını
Segment'ine eşlerken sıfır tabanlı indeksleme kullanın. - Her iki parametreyi de her işçide loglayın. Bir filo başarısız olduğunda hata mesajı sorunlu
SegmentveTotalSegmentsdeğerlerini adlandırır — bunları her sürecin gerçekte gönderdiğiyle karşılaştırın.
Örnek
const totalSegments = workers.length;
await Promise.all(
workers.map((_, segment) =>
doc.send(
new ScanCommand({
TableName: 'Orders',
Segment: segment, // 0 .. totalSegments - 1
TotalSegments: totalSegments
})
)
)
);DynoTable’da
Üretimde bir Taramayı paralelleştirmeden önce, tablonun ve filtre davranışının beklendiği gibi olduğunu doğrulamak için DynoTable'da tek bölümlü Tarama çalıştırın. Tabloyu ⌘K ile açın, sorgu panelinden bir Tarama çalıştırın ve döndürülen öğeleri inceleyin; bir çalışan filosu başlatmadan her segmentin dokunacağı verileri görürsünüz.
Taramayı koda taşıdığınızda, isteği Query Builder'de prototipleyin; tüm Tarama parametrelerinin yanı sıra Segment ve TotalSegments yayınlar. Ayarlar'da profil değiştirme (⌘P) ve Bağlantıyı Test Et → Profiller çalışanların doğru hesaba yönlendirilmesini sağlar. Bkz. Connect to AWS ve Install. Segmentlerin sıfır tabanlı olduğunu unutmayın: dört çalışanla geçerli değerler 1'den 4'e değil 0, 1, 2 ve 3'tür. Çalışan sayısı ve TotalSegments eşleştiği halde bir çalışanın hâlâ başarısız olmasının en yaygın nedeni tek tek segment atamasıdır.
Kaynaklar
- Scan — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
- Scanning tables in DynamoDB (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Query key condition not supported — ilgili bir Query/Scan ifade doğrulama hatası.
- Filter Expression can only contain non-primary key attributes — bir Scan/Query filtresinde yanlış kullanılan bir anahtar özniteliği.
- ValidationException (genel bakış)
- Öğrenin: Parallel scans
Kaynaklar
- Scan — Amazon DynamoDB API Reference
- Scanning tables in DynamoDB (Parallel scan) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.