Expression sana has exceeded the maximum allowed sana

TL;DR — DynamoDB, herhangi bir tek ifade dizesini 4 KB ile sınırlar (ifade parametreleri: UpdateExpression, ConditionExpression, FilterExpression, ProjectionExpression). Sizinki bunu aştı — genellikle büyük bir öğe üzerinde otomatik üretilmiş bir güncelleme ya da devasa bir IN (…) / OR filtresi. Öğeyi değil, ifadeyi küçültün.

Ne anlama gelir

ValidationException: 1 validation error detected: Invalid ConditionExpression: Expression size has exceeded the maximum allowed size; expression size: 27785

Sondaki bayt sayısı, ifadenizin ölçülen boyutudur, dolayısıyla her istekte farklıdır.

4 KB sınırı, öğenin 400 KB boyutundan bağımsız olarak, ifade dizesinin kendisinin uzunluğu üzerindedir. 400 KB'nin çok altındaki bir öğe, SDK öznitelik başına bir cümle oluşturursa (ayrıntılı yer tutucu adları hızla birikir) yine de ifade bütçesini aşabilir. Bu, ifadeyi değiştirmeden yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.

İfade bütçesinin önce çarpabileceğiniz kardeşleri vardır: her #name/:value yer tutucusu 255 baytla, birleşik ExpressionAttributeNames + ExpressionAttributeValues 2 MB ile, tek bir ifade 300 operatör/fonksiyonla ve bir IN karşılaştırıcısı 100 işlenenle sınırlıdır.

Neden olur

  • Geniş bir öğe üzerinde otomatik üretilmiş UpdateExpression — bir ORM/eşleyici, her öznitelik için SET #a0 = :v0, #a1 = :v1, … yayar ve yer tutucu adları + ayırıcılar 4 KB'yi geçer.
  • Devasa bir FilterExpression — uzun bir attr IN (:0, :1, …) ya da OR'lanmış koşullar zinciri.
  • Tek bir ConditionExpression'da birçok attribute_not_exists/karşılaştırmayla toplu koşullu yazmalar.
  • Büyük öğelerin konsol düzenlemeleri — büyük bir öğeyi kaydetmek büyük bir güncelleme/koşul ifadesini yeniden yayar.

Nasıl düzeltilir

  1. Yalnızca değişeni güncelleyin. UpdateExpression'ı tüm öğeden değil, farktan oluşturun — çoğu güncelleme bir avuç özniteliğe dokunur.
  2. Yer tutucu adlarını kısaltın. #a/:v, uzun açıklayıcı adları yener; sayılan uzunluk ifade dizesidir, bu yüzden daha kısa adlar gerçek boş alan sağlar.
  3. Devasa bir filtreyi daha dar sorgulara bölün ya da filtreye gerek kalmayacak şekilde yeniden yapılandırın (daha iyi bir anahtar/indeks daha az OR'lanmış koşul demektir).
  4. Aşırı büyük bir yazmayı birkaç daha küçük güncellemeye bölün ya da öğeyi, tek bir mantıksal değişikliğin her şeyi yeniden yazmayacağı şekilde modelleyin.
  5. Yuvalanmayı azaltın — derin yuvalanmış map yolları ifade uzunluğunu şişirir; yapabildiğiniz yerde düzleştirin.

Öğe ve güncelleme boyutunu birlikte mi izliyorsunuz? DynoTable masaüstü uygulaması her öğedeki öznitelikleri yüzeye çıkarır, böylece bir güncellemenin gerekenden çok daha fazlasına dokunacağı bellidir.

DynoTable'dan

DynoTable, ifadeleri 4 KB'ın oldukça altında tutarak, öğedeki her özellikten değil, gerçekte değiştirdiğiniz alanlardan güncelleme ifadeleri oluşturur. ⌘K ile bir öğe açın, belirli alanları düzenleyin ve oluşturulan ifade dizesi uzunluğunu kopyalayın.

Cümleleri eklerken ifade boyutunu izlemek için Expression Builder tuşunu kullanın. item sana calculator, geniş öğeler otomatik olarak oluşturulan güncellemeleri yönlendirdiğinde yardımcı olur. Profilleri ⌘P ile değiştirin; 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.