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 1

Mengapa itu terjadi

  • Penugasan segmen satu per satu — dengan TotalSegments = 4, menggunakan nilai Segment 1..4, bukan 0..3.
  • Segment ≥ TotalSegments — indeks pekerja yang memenuhi atau melampaui jumlah irisan.
  • Hanya satu dari pasangan yang disediakan — melewati Segment tanpa TotalSegments (atau sebaliknya); keduanya diperlukan untuk pemindaian paralel.
  • Ketidakcocokan kumpulan pekerja dinamisTotalSegments disetel ke nilai yang berbeda dari jumlah pekerja sebenarnya yang diluncurkan, sehingga beberapa pekerja mendapatkan indeks di luar kisaran.

Bagaimana cara memperbaikinya

  1. Tetapkan segmen 0 ke TotalSegments − 1 — satu Segment berbeda per pekerja.
  2. Selalu teruskan kedua parameter secara bersamaan pada setiap permintaan pemindaian paralel.
  3. Jaga TotalSegments sama dengan jumlah pekerja dan dalam 1..1,000,000 (TotalSegments dari 1 hanyalah pemindaian berurutan).
  4. Gunakan pengindeksan berbasis nol saat memetakan ordinal pekerja ke Segment-nya.
  5. Catat kedua parameter pada setiap pekerja. Saat armada gagal, pesan kesalahan akan menyebutkan Segment dan TotalSegments yang 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

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.