Provided list of item keys contains duplicates (BatchGetItem)

TL;DR — Bir tablo için BatchGetItem Keys diziniz aynı birincil anahtarı birden fazla kez listeliyor. DynamoDB, bir toplu istekteki her anahtarın benzersiz olmasını gerektirir ve tüm isteği reddeder — yineleneni sessizce düşürmez. Göndermeden önce anahtar listesindeki yinelenenleri giderin.

Ne anlama gelir

ValidationException: Provided list of item keys contains duplicates

BatchGetItem, tablolar genelinde en fazla 100 öğe okur. Tek bir tablonun Keys listesi içinde her girdi ayrı bir birincil anahtar (bölüm anahtarı ya da bileşik tablolar için bölüm + sıralama anahtarı) olmalıdır. Aynı anahtara çözümlenen iki girdi bu HTTP 400 ValidationException'ı tetikler ve tüm çağrı başarısız olur — hiçbir öğe döndürülmez. Olduğu gibi yeniden denenebilir değildir.

Neden olur

  • Listede aynı anahtarın iki kez görünmesi — genellikle ID'ler birden çok kaynaktan toplandığı ve hiç birleştirilmediği için.
  • Kaynağın yinelenen satırlara sahip olduğu üretilmiş bir anahtar listesi (örneğin bir kayıt listesini anahtarlara eşlemek).
  • Bileşik anahtar karışıklığı — iki girdi bölüm anahtarını paylaşıyor ama sıralama anahtarının farklı olduğunu unuttunuz; ya da her ikisi gerçekten aynı.
  • Gerçek bir yinelemeyi maskeleyen büyük/küçük harf / tür farkları — aynı değere marshal edilen iki anahtar.
  • Anahtarları bir yineleme giderme adımı olmadan toplu işleyen yükleme hatları (Glue, özel ETL).

Nasıl düzeltilir

  1. Çağrıdan önce yinelenenleri giderin. Her girdiyi kararlı bir dizeyle anahtarlayın ve birini tutun:
    const seen = new Set();
    const keys = raw.filter((k) => {
      const id = `${k.pk.S}#${k.sk?.S ?? ''}`;
      if (seen.has(id)) return false;
      seen.add(id);
      return true;
    });
  2. Bir toplu isteğin bir torba değil, bir küme olduğunu unutmayın — anahtar başına yalnızca bir okumaya ihtiyacınız var; öğe ne olursa olsun bir kez geri gelir.
  3. BatchGetItem başına 100 anahtara parçalayın ve yanıttaki UnprocessedKeys'i ele alın (yinelenenler değil, kısıtlama).
  4. ETL/yükleyicinizi aynı yineleme gidermeyle koruyun, böylece sorun yukarı akışta tekrarlayamaz.

Elle toplu okuma yapıyor ve tam olarak hangi anahtarları gönderdiğinizi görmek mi istiyorsunuz? DynoTable masaüstü uygulaması öğeleri anahtara göre listeler, böylece bir çalışma kümesindeki yanlışlıkla yinelenenleri fark etmek kolaydır.

DynoTable yolu

Anahtarları üretimden toplu olarak okumadan önce, DynoTable'deki kopyaları tespit edin — ⌘K ile tabloyu açın, getirmeyi planladığınız kimliklere göre filtreleyin ve her birincil anahtarın bir kez göründüğünü onaylayın. Öğe listesi bölümleme ve sıralama anahtarlarını yan yana gösterir, böylece bileşik anahtar çarpışmaları açıkça görülür.

Okumayı koda taşıdığınızda, önce tek tuşlu okumaların prototipini oluşturmak için Query Builder'i kullanın, ardından parçalı BatchGetItem'ya ölçeklendirin. Profilleri ⌘P ile değiştirin; bunları Ayarlar → Profiller altında Bağlantıyı Test Et ile yapılandırın. Bkz. Connect to AWS ve Install.

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.