Segmen harus lebih kecil dari TotalSegments — "Segment must be less than TotalSegments"
TL;DR — Dalam Pemindaian paralel, setiap pekerja menetapkan Segment (indeks irisannya) dan TotalSegments (berapa banyak irisan). DynamoDB memerlukan 0 ≤ Segment < TotalSegments, dan keduanya harus disediakan bersamaan. Segment yang sama dengan atau lebih tinggi dari TotalSegments ditolak. Tetapkan Segment yang berbeda untuk setiap pekerja, dari 0 hingga TotalSegments − 1.
Apa artinya
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 1Mengapa itu terjadi
- Penugasan segmen satu per satu — dengan
TotalSegments = 4, menggunakan nilaiSegment1..4, bukan0..3. - Segment ≥ TotalSegments — indeks pekerja yang memenuhi atau melampaui jumlah irisan.
- Hanya satu dari pasangan yang disediakan — melewati
SegmenttanpaTotalSegments(atau sebaliknya); keduanya diperlukan untuk pemindaian paralel. - Ketidakcocokan kumpulan pekerja dinamis —
TotalSegmentsdisetel ke nilai yang berbeda dari jumlah pekerja sebenarnya yang diluncurkan, sehingga beberapa pekerja mendapatkan indeks di luar kisaran.
Bagaimana cara memperbaikinya
- Tetapkan segmen
0keTotalSegments − 1— satuSegmentberbeda per pekerja. - Selalu teruskan kedua parameter secara bersamaan pada setiap permintaan pemindaian paralel.
- Jaga
TotalSegmentssama dengan jumlah pekerja dan dalam1..1,000,000(TotalSegmentsdari1hanyalah pemindaian berurutan). - Gunakan pengindeksan berbasis nol saat memetakan ordinal pekerja ke
Segment-nya. - Catat kedua parameter pada setiap pekerja. Saat armada gagal, pesan kesalahan akan menyebutkan
SegmentdanTotalSegmentsyang melanggar — bandingkan dengan data yang sebenarnya dikirim oleh setiap proses.
Contoh
const totalSegments = workers.length;
await Promise.all(
workers.map((_, segment) =>
doc.send(
new ScanCommand({
TableName: 'Orders',
Segment: segment, // 0 .. totalSegments - 1
TotalSegments: totalSegments
})
)
)
);Di DynoTable
Sebelum Anda memparalelkan Scan dalam produksi, jalankan Scan segmen tunggal di DynoTable untuk mengonfirmasi bahwa tabel dan filter berperilaku seperti yang diharapkan. Buka tabel dengan ⌘K, jalankan Scan dari panel kueri, dan periksa item yang dikembalikan — Anda melihat data yang akan disentuh setiap segmen tanpa meluncurkan armada worker.
Saat Anda memindahkan Scan ke dalam kode, buat prototipe permintaannya di Pembuat Kueri — alat itu memancarkan Segment dan TotalSegments bersama parameter Scan lengkap. Peralihan profil (⌘P) dan Test Connection di Pengaturan → Profil menjaga worker tetap diarahkan ke akun yang tepat. Lihat Menghubungkan ke AWS dan Instal. Ingat bahwa segmen berbasis nol: dengan empat worker, nilai yang valid adalah 0, 1, 2, dan 3 — bukan 1 hingga 4. Penetapan segmen yang meleset satu adalah penyebab paling umum ketika jumlah worker dan TotalSegments cocok tetapi satu worker tetap gagal.
Sumber
- Pindai — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- Memindai tabel dalam DynamoDB (diverifikasi 13-07-2026)
Kesalahan terkait
- Kondisi kunci kueri tidak didukung — kesalahan validasi ekspresi Kueri/Pemindaian terkait.
- Ekspresi Filter hanya dapat berisi atribut non-kunci utama — atribut kunci yang salah digunakan dalam filter Pindai/Kueri.
- ValidationException (ikhtisar)
- Pelajari: Pemindaian paralel
Referensi
- Pindai — Referensi Amazon DynamoDB API
- Memindai tabel dalam DynamoDB (Pemindaian paralel) — Panduan Pengembang Amazon DynamoDB
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.