Başlangıç2 dakikalık okuma

Örneklerle DynamoDB için PartiQL

, DynamoDB için SQL uyumlu bir sorgu dilidir. Anlık işler için ham API'den daha dostçadır — ama aynı motor üzerinde çalışır, dolayısıyla tanıdık sözdiziminin altında aynı anahtar kuralları (ve aynı maliyetler) geçerlidir.

DynamoDB için PartiQL sorgularını nasıl yazarsınız?

PartiQL, DynamoDB'ye dört SQL biçimli ifade verir — SELECT, INSERT, UPDATE ve DELETEExecuteStatement aracılığıyla çalıştırılır. Her biri altta yerel bir işleme derlenir, bu yüzden üzerinde filtrelemek bir Query olarak kalırken onu atlamak tam tablo Scan'ine dönüşür. Yazma işlemleri yine tek bir öğeyi göre hedefler; ilişkisel bir JOIN, GROUP BY veya toplama (aggregate) yoktur.

SELECT

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')

üzerinde filtreleyin ve bu bir Query'dir. Bölüm anahtarını atlayın, PartiQL sessizce tam tablo bir Scan çalıştırır — aynı ayak-silahı, sadece SELECT *'ın arkasına gizlenmiş.

INSERT

INSERT INTO "AppData" VALUE {'PK': 'CUSTOMER#42', 'SK': 'PROFILE', 'plan': 'pro'}

UPDATE

UPDATE "AppData" SET "plan" = 'enterprise'
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'PROFILE'

DELETE

DELETE FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'ORDER#2026-001'

Bir dizini sorgulama

FROM yan tümcesinde dizin adını kullanın:

SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'

WHERE ayrıca IN, contains() ve begins_with() destekler:

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']

Parametreli ifadeler

Değerleri satır içine gömmek yerine ? yer tutucuları kullanın — bu, tırnak/enjeksiyon sorunlarını atlatır ve SDK'nın türleri sizin için marshal etmesini sağlar:

SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)

ExecuteStatement'a Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] geçirin.

Toplu işlem ve işlemler (transactions)

  • BatchExecuteStatement — tek bir gidiş-dönüşte 25'e kadar ifade. Daha hızlı, ama öğeler arası atomiklik yok (her biri kendi başına başarılı olur veya başarısız olur).
  • ExecuteTransaction100'e kadar ifade, ya hep ya hiç. Birkaç yazmanın birlikte commit edilmesi gerektiğinde kullanın.

PartiQL ayak-silahı

PartiQL SQL'e benzer ama DynamoDB motoru üzerinde çalışır, bu yüzden SQL alışkanlıkları ters teper:

  • Tek bir UPDATE/DELETE, tam göre tek bir öğeyi hedeflemelidir — UPDATE … WHERE status = 'x' gibi bir toplu güncelleme yoktur (bunun yerine bir toplu işlemle döngü kurun).
  • JOIN yok, GROUP BY yok, toplama fonksiyonları yok (COUNT/SUM/AVG). Bkz. PartiQL ve SQL.
  • Bölüm anahtarını atlamak herhangi bir SELECT'i tam tablo bir Scan'e dönüştürür — yalnızca faturanızla sınırlıdır.

Gerçekten bir JOIN'e, bir GROUP BY'a veya bir toplamaya ihtiyacınız olduğunda, DynoTable'ın SQL Workbench'i bunları çektiğiniz satırlar üzerinde istemci tarafında çalıştırır — PartiQL'in konuşamadığı SQL, DynamoDB'nin erişim-deseni kuralları içinde.

PartiQL, altta yatan veri türlerini değiştirmez — değerler yine tel üzerinde DynamoDB-JSON olarak gider ve bunu dönüştürücü ile inceleyebilirsiniz.

Şema-farkındalıklı otomatik tamamlama ile PartiQL ifadelerini çalıştırmak ve sonuçlara sıralanabilir bir tablo görünümünde göz atmak için DynoTable'ı deneyin.

Güncellendi