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 1

Bir 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 = 4 ile, 0..3 yerine 1..4 Segment değerlerini kullanmak.
  • Segment ≥ TotalSegments — dilim sayısını karşılayan ya da aşan bir işçi indeksi.
  • Çiftin yalnızca biri sağlanmışTotalSegments olmadan Segment (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

  1. 0'dan TotalSegments − 1'e kadar segmentler atayın — işçi başına bir ayrı Segment.
  2. Her paralel-tarama isteğinde her zaman her iki parametreyi de birlikte iletin.
  3. TotalSegments'i işçi sayısına eşit ve 1..1.000.000 içinde tutun (bir TotalSegments 1, yalnızca sıralı bir taramadır).
  4. Bir işçinin sıra numarasını Segment'ine eşlerken sıfır tabanlı indeksleme kullanın.
  5. Her iki parametreyi de her işçide loglayın. Bir filo başarısız olduğunda hata mesajı sorunlu Segment ve TotalSegments değ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

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.