Pemula2 menit baca

PartiQL untuk DynamoDB lewat Contoh

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

SELECT

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

Filter pada partition key dan ini menjadi sebuah Query. Hilangkan partition key dan PartiQL diam-diam menjalankan full-table Scan — jebakan 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'

Mem-query sebuah index

Gunakan nama index dalam 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 terparameterisasi

Gunakan placeholder ? alih-alih menanam nilai secara inline — ini menghindari masalah quoting/injection dan membiarkan SDK me-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 perjalanan pulang-pergi. Lebih cepat, tetapi tanpa atomisitas lintas Item (masing-masing berhasil atau gagal sendiri).
  • ExecuteTransaction — hingga 100 pernyataan, semua-atau-tidak-sama-sekali. Gunakan saat beberapa penulisan harus di-commit bersama.

Jebakan PartiQL

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

  • Satu UPDATE/DELETE harus menargetkan satu Item berdasarkan primary key penuhnya — tidak ada mass update UPDATE … WHERE status = 'x' (lakukan loop dengan batch sebagai gantinya).
  • Tidak ada JOIN, tidak ada GROUP BY, tidak ada agregat (COUNT/SUM/AVG). Lihat PartiQL vs SQL.
  • Menghilangkan partition key mengubah SELECT apa pun menjadi full-table Scan — hanya dibatasi oleh tagihan Anda.

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

PartiQL tidak mengubah tipe data yang mendasarinya — nilai tetap melintas di wire sebagai DynamoDB-JSON, yang dapat Anda periksa dengan konverter.

Coba DynoTable untuk menjalankan pernyataan PartiQL dengan autocomplete dan melihat read unit yang dikonsumsi masing-masing.

Diperbarui