DynamoDB SQL destekler mi?
Kısmen. DynamoDB, SELECT, INSERT, UPDATE ve DELETE ifadeleri için SQL uyumlu bir sorgu dili olan PartiQL'i destekler. Tam SQL değildir: JOIN yoktur, GROUP BY yoktur, keyfi toplamalar yoktur ve verimli sorgular yine de birincil anahtarı ya da bir indeksi hedeflemeyi gerektirir. O eksik parçaları istiyorsanız, DynoTable'ın SQL Workbench'i masaüstünden DynamoDB tablolarınız üzerinde gerçek JOIN, GROUP BY ve toplama sorguları çalıştırır.
PartiQL sana ne verir
Dört veri işlemi için tanıdık bir SQL söz dizimi. Düşük seviyeli API çağrıları kurmak yerine SELECT * FROM "Orders" WHERE ... yazabilirsiniz; bu da kullanışlı ve okunaklıdır.
Sana ne vermez
- JOIN yok — DynamoDB ilişkisel değildir; onun yerine denormalize edersiniz.
- GROUP BY / toplama yok — gruplama ve toplama uygulamanızda gerçekleşir.
- Ucuza serbest biçimli tarama yok — anahtar koşulu olmayan bir
SELECTyine bir Scan çalıştırır ve buna göre maliyetlenir.
Ayrıştırıcı nerede durur
Bunlar farklı bir söz dizimiyle ulaşabileceğiniz özellikler değildir. Onları çalıştırın; ifade bir öğe okumaya bile ulaşamaz:
SELECT "region", SUM("total") FROM "Orders" GROUP BY "region"
ValidationException: Unsupported clause: GROUP BY
SELECT COUNT(*) FROM "Orders"
ValidationException: Unexpected path component at 1:8:5
SELECT SUM("total") FROM "Orders"
ValidationException: Unexpected path component at 1:8:3
SELECT DISTINCT "region" FROM "Orders"
ValidationException: Unsupported token in expression: DISTINCTToplama hatalarının ne dediğine bakın. Ayrıştırıcının geri çevireceği bir toplama işlevi yoktur; dolayısıyla COUNT(*) bir öznitelik yolu olarak okunur ve 8. sütunda * üzerinde tökezler. SQL yüzeyi işte bu kadar incedir.
ORDER BY bilinmesi gerekendir, çünkü çalışıyormuş gibi görünür:
SELECT * FROM "Orders" WHERE "pk" = 'U#1' ORDER BY "total"
ValidationException: Variable reference total in ORDER BY clause must be part of the primary keySıralama anahtarına göre artan ya da azalan sıralayabilirsiniz, başka hiçbir şeye göre sıralayamazsınız. Başka herhangi bir özniteliğe göre sıralamak, okumadan sonra uygulamanızın işidir.
Zihinsel model
PartiQL'i, DynamoDB'nin mevcut Query, Scan ve yazma işlemlerinin üzerindeki bir söz dizimi katmanı olarak düşünün; altta aynı erişim deseni kuralları geçerlidir.
DynoTable ile gerçek SQL (JOIN, GROUP BY, toplamalar)
PartiQL tek tablolu SELECT'te durur. DynoTable'ın SQL Workbench'i daha ileri gider: DynamoDB tablolarınız üzerinde gerçek JOIN, GROUP BY ve toplama işlevleri (COUNT, SUM, AVG, MIN, MAX) çalıştırır. Öğeleri normal DynamoDB API'si üzerinden okur, sonra sorgunun ilişkisel kısmını istemcide yürütür: DynamoDB'nin erişim deseni kuralları içinde SQL — çünkü her join yine gerçek bir anahtar ya da indeks üzerinden okur. Böylece PartiQL'in yapamadığı üç şeyi tek bir ifade olarak yazarsınız:
SELECT c.region, COUNT(*) AS orders, SUM(o.total) AS revenue
FROM Orders o
JOIN Customers c ON o.customerId = c.id
GROUP BY c.regionAlttaki kısıtlar konusunda dürüst kalır (sınırsız bir join sınırsız bir okumadır); dolayısıyla en hızlı sorgular, join'i ya da WHERE'i bir bölüm anahtarına ya da indekse isabet edenlerdir. Tüm ayrıntı DynamoDB için SQL sayfasında ve ürün el
kitabındaki /docs/dynamodb-sql-workbench bölümünde.
Aynı veri modelinin PartiQL tarafını
DynamoDB sorgu oluşturucusuyla prototipleyin —
bir anahtar koşulu varken PartiQL SELECT'in kullandığı verimli yolda kalan,
bölüm kapsamlı Query programları yayar.
Daha derine inin
İkisini PartiQL ile SQL sayfasında karşılaştırın, PartiQL örneklerine bakın ve DynamoDB için SQL sayfasını okuyun. Tablolarınıza karşı PartiQL ve gerçek JOIN, GROUP BY ve toplamalar yazmak için DynoTable'ı indirin.
Kaynaklar
- PartiQL - a SQL-compatible query language for Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PartiQL select statements for DynamoDB — Amazon DynamoDB Developer Guide
- Query data in DynamoDB (SQL to NoSQL) — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
Yukarıdaki her ValidationException, 2026-07-28 tarihinde @aws-sdk/client-dynamodb 3.1095.0 üzerinden DynamoDB Local 3.3.0'a karşı yeniden üretildi ve sütun ofsetleri dahil birebir alıntılandı.