ValidationException: Unexpected from source

TL;DR — PartiQL FROM cümlenizdeki tablo adı, ayrıştırıcının çıplak kabul etmeyeceği karakterler içeriyor — genellikle bir tire. Adı çift tırnak içine alın (SELECT * FROM "my-table"). Tek tırnaklar çalışmaz: PartiQL'de bir tanımlayıcı değil, bir dize literalini ifade ederler.

Ne anlama gelir

ValidationException: Unexpected from source

PartiQL ayrıştırıcısı, FROM my-tablemy tanımlayıcısının ardından beklenmeyen belirteçler olarak okur — tire, çıplak bir tanımlayıcının içinde geçerli değildir. DynamoDB tablo adları meşru biçimde -, . ve _ içerebilir, dolayısıyla gayet geçerli bir tablo adı, tırnak içine alınana kadar PartiQL'de yine de ayrıştırılamaz olabilir. Aynısı PartiQL anahtar sözcükleriyle çakışan adlar için de geçerlidir.

Neden olur

  • Tablo adı bir tire ya da nokta içeriyorusers-prod, app.events. Çıplak tanımlayıcılar onları taşıyamaz.
  • Çerçeve tarafından üretilen tablo adları — tablo adına bir ortam ya da aşama ekleyen araçlar (örneğin Todo-dev), siz seçmeden bir tirenin girmesinin klasik yoludur.
  • Bir indeksi tırnak olmadan sorgulamak"table"."index" biçimi her iki parçanın da etrafında çift tırnak gerektirir.
  • Çift yerine tek tırnakFROM 'my-table' de başarısız olur: tek tırnaklar PartiQL'de bir ad değil, bir dize literalini ifade eder.

Nasıl düzeltilir

  1. Tablo adını çift tırnak içine alın:

    SELECT * FROM "users-prod" WHERE pk = 'USER#42'
  2. Bir indeksi sorgularken her iki parçayı da çift tırnak içine alın:

    SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'
  3. Tek tırnakları yalnızca dize değerleri için tutun — adlar çift tırnakta, değerler tek tırnakta. Onları karıştırmak tam olarak bu tür ayrıştırma hatasını üretir.

  4. Üretilen ifadelerde savunmacı tırnak kullanın — kodunuz tablo adlarını PartiQL'e enterpole ediyorsa, onları her zaman çift tırnaklı yayın; ad kesin olarak buna ihtiyaç duymasa bile geçerlidir.

DynoTable masaüstü uygulaması, DynamoDB için tanımlayıcı tırnaklamasını sizin için ele alan bir SQL çalışma tezgahı gönderir ve DynamoDB Expression Builder, PartiQL ayrıştırmasını tamamen atlamayı tercih ettiğinizde eşdeğer yerel Query/Scan isteğini gösterir.

İlgili hatalar

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.