ExpressionAttributeNames contains invalid key: Syntax error
TL;DR — Sorun, işaret ettiği öznitelik değil, ExpressionAttributeNames map'inizin sol tarafındaki yer tutucu anahtarıdır. Bir yer tutucu, # ardından düz harfler, rakamlar ya da alt çizgiler (#name, #p0) olmalıdır. Gerçek öznitelik adını — noktaları, tireleri, + işaretleri ya da boşluklarıyla — yer tutucunun kendisine koyarsanız, DynamoDB map'i reddeder. Yer tutucuları sıkıcı tutun; dağınık gerçek adı sağ tarafa koyun.
Ne anlama gelir
ValidationException: 1 validation error detected: ExpressionAttributeNames contains invalid key:
Syntax error; key: "#my.attribute"
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: ExpressionAttributeNames contains invalid key: Syntax error; key: "#my.attribute"ExpressionAttributeNames, bir yer tutucu belirtecini (ifadenizin içinde kullanılır) gerçek bir öznitelik adına eşler. DynamoDB, verinize dokunmadan önce yer tutucunun söz dizimini doğrular: # ile başlamalı ve yalnızca bir ifade belirteci içinde geçerli olan karakterleri içermelidir. İfade dilbilgisinde bir anlam taşıyan özel karakterler — . (yol ayırıcısı), -, +, boşluklar — yer tutucunun kendisini ayrıştırılamaz hale getirir ve tüm istek bu ValidationException ile reddedilir.
Neden olur
- Gerçek öznitelik adı yer tutucuya kopyalandı — örneğin
{"#stats.daily": "stats.daily"}. Anahtardaki nokta, neye eşlendiğinden bağımsız olarak bir söz dizimi hatasıdır. - Yer tutucuda özel karakterler — tireler (
#user-id),+işaretleri ya da boşluklar.#'ten sonra yalnızca alfanümerikler ve alt çizgiler güvenlidir. - Eksik bir
#—ExpressionAttributeNames'teki anahtarlar#ile başlamalıdır;{"name": "name"}geçersizdir. - Nokta ya da özel karakterler içeren öznitelik adlarından yer tutucuları otomatik üreten bir kitaplık, karakteri doğrudan geçirir.
Nasıl düzeltilir
Basit yer tutucular kullanın ve her birini gerçek ada eşleyin:
{ ExpressionAttributeNames: {'#p0': 'user-id', '#p1': 'stats'}, KeyConditionExpression: '#p0 = :uid' }Yuvalanmış yollar için her segmenti ayrı ayrı takma adlandırın — yol öğesi başına bir yer tutucu, ifadede literal bir noktayla birleştirilir:
// read stats.daily where the item has a top-level "stats" map { ProjectionExpression: '#s.#d', ExpressionAttributeNames: {'#s': 'stats', '#d': 'daily'} }Diğer yüze dikkat edin: özniteliğin gerçek adı literal bir nokta içeriyorsa (yuvalanmış bir yol değil,
"stats.daily"adlı bir öznitelik), tüm ad için tek bir yer tutucu tam olarak istediğiniz şeydir —{'#sd': 'stats.daily'}— böylece nokta, bir yol ayırıcısı değil, adın parçası olarak ele alınır.Sarmalayıcınızın ne ürettiğini kontrol edin — bir ODM/yardımcı map'i senin için oluşturuyorsa, son isteği günlüğe kaydedin ve ürettiği yer tutucu anahtarlarını inceleyin.
Adları noktalar ve tirelerle dolu özniteliklerle mi çalışıyorsunuz? DynoTable masaüstü uygulaması öznitelik ne olarak adlandırılırsa adlandırılsın, sorgularını düzgün takma adlandırılmış adlarla otomatik oluşturur.
DynoTable’da kontrol et
DynoTable basit # öneki yer tutucularla sorgular oluşturur; noktalar, kısa çizgiler veya ayrılmış kelimeler içeren özellik adları haritanın sağ tarafında doğru şekilde takma adlarla gösterilir. ⌘K ile bir tablo açın, filtreler ekleyin ve oluşturulan ExpressionAttributeNames'i kopyalayın.
Takma adları elle yazarken reserved words checker içindeki özellik adlarını çapraz kontrol edin. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.
Kaynaklar
- Expression attribute names (aliases) in DynamoDB (2026-07-13 tarihinde doğrulandı)
- Reserved words in DynamoDB (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Attribute name is a reserved keyword —
ExpressionAttributeNameskullanmanın diğer büyük nedeni. - Value provided in ExpressionAttributeNames unused in expressions
- ExpressionAttributeValues içinde sağlanan değer kullanılmıyor
- Öğrenin: Expression names & values
Kaynaklar
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.