Pemula2 menit baca

PartiQL untuk DynamoDB lewat Contoh

adalah bahasa query yang kompatibel-SQL untuk DynamoDB. Ia lebih ramah daripada API mentah untuk pekerjaan ad-hoc — tetapi ia berjalan di mesin yang sama, jadi aturan key yang sama (dan biaya yang sama) berlaku di baliknya, di bawah sintaks yang familiar.

Bagaimana cara menulis query PartiQL untuk DynamoDB?

PartiQL memberi DynamoDB empat pernyataan berbentuk-SQL — SELECT, INSERT, UPDATE, dan DELETE — dijalankan lewat ExecuteStatement. Masing-masing dikompilasi menjadi operasi native di baliknya, jadi memfilter pada tetap sebuah Query sementara menghilangkannya menjadi full-table Scan. Penulisan tetap menargetkan satu Item lewat -nya; tidak ada JOIN, GROUP BY, atau agregat relasional.

SELECT

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

Filter pada dan ini adalah sebuah Query. Hilangkan partition key dan PartiQL secara diam-diam menjalankan full-table Scan — footgun yang sama, hanya tersembunyi di balik SELECT *.

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'

Melakukan query pada indeks

Gunakan nama indeks di klausa FROM:

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

WHERE juga mendukung IN, contains() dan begins_with():

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

Pernyataan berparameter

Gunakan placeholder ? alih-alih menanam nilai secara inline — ini menghindari masalah quoting/injection dan membiarkan SDK mem-marshal tipe untuk Anda:

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

Berikan Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] ke ExecuteStatement.

Batch dan transaksi

  • BatchExecuteStatement — hingga 25 pernyataan dalam satu round trip. Lebih cepat, tetapi tanpa atomisitas lintas-Item (masing-masing berhasil atau gagal sendiri-sendiri).
  • ExecuteTransaction — hingga 100 pernyataan, semua-atau-tidak-sama-sekali. Gunakan saat beberapa penulisan harus commit bersama-sama.

Footgun PartiQL

PartiQL terlihat seperti SQL tetapi berjalan di mesin DynamoDB, jadi kebiasaan SQL menjadi bumerang:

  • Sebuah UPDATE/DELETE tunggal harus menargetkan satu Item lewat lengkapnya — tak ada mass update UPDATE … WHERE status = 'x' (loop dengan sebuah batch sebagai gantinya).
  • Tanpa JOIN, tanpa GROUP BY, tanpa agregat (COUNT/SUM/AVG). Lihat PartiQL vs SQL.
  • Menghilangkan partition key mengubah SELECT apa pun menjadi full-table Scan — dibatasi hanya oleh tagihan Anda.

Saat Anda benar-benar butuh JOIN, GROUP BY, atau agregat, SQL Workbench DynoTable menjalankannya di sisi klien atas baris-baris yang sudah Anda tarik — SQL yang tak bisa diucapkan PartiQL, di dalam aturan pola akses DynamoDB.

PartiQL tidak mengubah tipe data yang mendasarinya — nilai tetap melintas di kabel sebagai DynamoDB-JSON, yang bisa Anda inspeksi dengan konverter.

Coba DynoTable untuk menjalankan pernyataan PartiQL dengan autocomplete sadar-skema dan menjelajahi hasilnya dalam tampilan tabel yang dapat diurutkan.

Diperbarui