Einsteiger2 Min. Lesezeit

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/DELETE muss ein Item über seinen vollständigen Primärschlüssel adressieren — es gibt kein UPDATE … WHERE status = 'x'-Massenupdate (schleife stattdessen mit einem Batch).
  • Kein JOIN, kein GROUP BY, keine Aggregate (COUNT/SUM/AVG). Siehe PartiQL vs SQL.
  • Den Partition Key wegzulassen verwandelt jedes SELECT in 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.

Aktualisiert