PartiQL für DynamoDB anhand von Beispielen
PartiQL ist eine SQL-kompatible Abfragesprache für DynamoDB. Sie ist freundlicher als die rohe API für Ad-hoc-Arbeit — aber sie läuft auf derselben Engine, also gelten unter der vertrauten Syntax dieselben Schlüsselregeln (und dieselben Kosten).
SELECT
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')Filtere auf dem Partition Key, und das ist ein Query. Lass den Partition Key
weg, und PartiQL führt still einen vollständigen Tabellen-Scan
aus — dieselbe Fußangel, nur hinter SELECT * versteckt.
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'Einen Index abfragen
Verwende den Indexnamen in der FROM-Klausel:
SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'WHERE unterstützt auch IN, contains() und begins_with():
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']Parametrisierte Statements
Verwende ?-Platzhalter, statt Werte inline einzusetzen — das umgeht
Quoting-/Injection-Probleme und lässt das SDK die Typen für dich marshallen:
SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)Übergib Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] an ExecuteStatement.
Batch und Transaktionen
BatchExecuteStatement— bis zu 25 Statements in einem Round Trip. Schneller, aber keine itemübergreifende Atomarität (jedes gelingt oder scheitert für sich).ExecuteTransaction— bis zu 100 Statements, alles-oder-nichts. Verwende es, wenn mehrere Schreibvorgänge gemeinsam committen müssen.
Die PartiQL-Fußangel
PartiQL sieht aus wie SQL, läuft aber auf der DynamoDB-Engine, also gehen SQL-Gewohnheiten nach hinten los:
- Ein einzelnes
UPDATE/DELETEmuss ein Item über seinen vollständigen Primärschlüssel adressieren — es gibt keinUPDATE … WHERE status = 'x'-Massenupdate (schleife stattdessen mit einem Batch). - Kein
JOIN, keinGROUP BY, keine Aggregate (COUNT/SUM/AVG). Siehe PartiQL vs SQL. - Den Partition Key wegzulassen verwandelt jedes
SELECTin einen vollständigen Tabellen-Scan — begrenzt nur durch deine Rechnung.
Wenn du wirklich einen JOIN, ein GROUP BY oder ein Aggregat brauchst, führt
DynoTables SQL Workbench sie clientseitig über die Zeilen aus, die du gezogen hast —
das SQL, das PartiQL nicht sprechen kann, innerhalb von DynamoDBs
Zugriffsmuster-Regeln.
PartiQL ändert die zugrundeliegenden Datentypen nicht — Werte gehen weiterhin als DynamoDB-JSON über die Leitung, das du mit dem Konverter inspizieren kannst.
Probiere DynoTable, um PartiQL-Statements mit Autovervollständigung auszuführen und die Lese-Einheiten zu sehen, die jedes verbraucht.