DynamoDB — cannot specify projection when Select is COUNT

TL;DR — Query/Scan'iniz Select: COUNT ile bir ProjectionExpression (ya da eski AttributesToGet) ayarladı. COUNT yalnızca eşleşen öğe sayısını döndürür, asla öğelerin kendisini değil, dolayısıyla döndürülecek öznitelikleri adlandırmak çelişkilidir — DynamoDB onu reddeder. Birini seçin: projeksiyon olmadan Select: COUNT ya da Select: SPECIFIC_ATTRIBUTES (bir ProjectionExpression sağladığınızda varsayılan) ile bir projeksiyon.

Ne anlama gelir

ValidationException: 1 validation error detected: Cannot specify the AttributesToGet when choosing to get only the Count

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Cannot specify the ProjectionExpression when choosing to get only the Count

(Bu, eski AttributesToGet parametresiyle olan mesajdır; ProjectionExpression ile ifade farklıdır ama kural aynıdır.) Select, bir okumanın ne döndüreceğini kontrol eder. COUNT, DynamoDB'den bir toplam (Count/ScannedCount) ister ve öğe verisi istemez. Bir ProjectionExpression/AttributesToGet, döndürülen öğelerin belirli özniteliklerini ister. Bu ikisi karşılıklı dışlar — Query API referansı bunu açıkça belirtir: "ProjectionExpression parametresini kullanırsanız, Select değeri yalnızca SPECIFIC_ATTRIBUTES olabilir. Select için başka herhangi bir değer bir hata döndürür." Bir maliyet notu: COUNT yine de öğeleri gerçekten getirmekle aynı okuma kapasitesini tüketir — RCU'ları değil, bant genişliğini tasarruf eder.

Neden olur

  • Her iki parametre aynı anda ayarlanmış — bir ProjectionExpression eklenirken (ya da tersi) Select: COUNT yerinde bırakılmış.
  • Select: COUNT ile birleştirilmiş eski AttributesToGet.
  • Çağıran yalnızca bir sayı istese bile her zaman bir projeksiyon ekleyen bir sorgu oluşturucu.
  • Select'i yanlış anlamakCOUNT'un saydığı öğeleri de geri vermesini beklemek.

Nasıl düzeltilir

  1. Yalnızca sayıyor musunuz? Projeksiyonu bırakın. Select: COUNT ayarlayın ve ProjectionExpression/AttributesToGet'i kaldırın.
  2. Belirli özniteliklere mi ihtiyacınız var? Select: COUNT'u bırakın. Bir ProjectionExpression sağlayın; DynamoDB Select'i varsayılan olarak SPECIFIC_ATTRIBUTES yapar, dolayısıyla genellikle Select'i hiç ayarlamazsınız.
  3. Hem sayıya hem öğelere mi ihtiyacınız var? Öğeler için bir çağrı yapın (projeksiyonunuzla) ve Count'unu okuyun ya da ayrı bir Select: COUNT çağrısı yapın.
  4. AttributesToGet yerine ProjectionExpression'ı tercih edin — AWS AttributesToGet'i eski bir parametre olarak işaretler ve bunun yerine ProjectionExpression'ı önerir.

Keşfederken yalnızca hızlı bir sayı ya da projelenmiş bir görünüm mü istiyorsunuz? DynoTable masaüstü uygulaması, çelişen Select parametrelerini elle birleştirmenize gerek kalmadan sorgular çalıştırır ve eşleşen sayıyı gösterir.

DynoTable’da aç

DynoTable'in sorgu paneli sayım modunu projeksiyondan ayırır; seçilen niteliklere sahip öğeleri getirirsiniz veya eşleşen sayıyı okursunuz; asla her ikisi birden çakışan bir istekte olmaz. ⌘K ile bir tablo açın, bir Sorgu çalıştırın ve ProjectionExpression eklemeden durum çubuğundaki sonuç sayısını kontrol edin.

SDK kodunuz için yalnızca projeksiyon veya yalnızca sayım isteği oluşturmak için Query Builder tuşunu kullanın. 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.