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: 27785Sondaki 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çinSET #a0 = :v0, #a1 = :v1, …yayar ve yer tutucu adları + ayırıcılar 4 KB'yi geçer. - Devasa bir
FilterExpression— uzun birattr IN (:0, :1, …)ya daOR'lanmış koşullar zinciri. - Tek bir
ConditionExpression'da birçokattribute_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
- 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. - 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. - 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). - 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.
- 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
- Constraints in Amazon DynamoDB (2026-07-13 tarihinde doğrulandı)
- Using update expressions in DynamoDB (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Item sana exceeded the maximum (400 KB) — ifade değil, öğe çok büyük.
- Reserved keyword in attribute name — en başta neden yer tutuculara ihtiyaç duyduğunuz.
- Öğrenin: Update expressions · Filtering strategies
Kaynaklar
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.