Menyunting revisi dokumen - Amazon Quantum Ledger Database (Amazon QLDB)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyunting revisi dokumen

Di Amazon QLDB,DELETE pernyataan hanya secara logis menghapus dokumen dengan membuat revisi baru yang menandainya sebagai dihapus. QLDB juga mendukung operasi redaksi data yang memungkinkan Anda menghapus revisi dokumen yang tidak aktif secara permanen dalam sejarah tabel.

catatan

Buku besar apa pun yang dibuat sebelum 22 Juli 2021 saat ini tidak memenuhi syarat untuk redaksi. Anda dapat melihat waktu pembuatan buku besar Anda di konsol Amazon QLDB.

Operasi redaksi hanya menghapus data pengguna dalam revisi yang ditentukan dan membiarkan urutan jurnal dan metadata dokumen tidak berubah. Ini menjaga integritas data keseluruhan buku besar Anda.

Sebelum memulai redaksi data di QLDB, pastikan Anda meninjauPertimbangan dan batasan redaksi di referensi Amazon QLDB PartiQL.

Prosedur redaksi disimpan

Anda dapat menggunakan prosedur yangREDACT_REVISI disimpan untuk menghapus revisi individu yang tidak aktif secara permanen dalam buku besar. Prosedur tersimpan ini menghapus semua data pengguna dalam revisi yang ditentukan di penyimpanan terindeks dan penyimpanan jurnal. Namun, ia meninggalkan urutan jurnal dan metadata dokumen, termasuk ID dokumen dan hash, tidak berubah. Operasi ini tidak dapat diubah.

Revisi dokumen yang ditentukan harus merupakan revisi tidak aktif dalam sejarah. Revisi aktif terbaru dari dokumen tidak memenuhi syarat untuk redaksi.

Untuk menyunting beberapa revisi, Anda harus menjalankan prosedur yang disimpan satu kali untuk setiap revisi. Anda dapat menyunting satu revisi per transaksi.

Sintaks

EXEC REDACT_REVISION `block-address`, 'table-id', 'document-id'
Pendapat
`blok-alamat `

Lokasi blok jurnal revisi dokumen yang akan disunting. Alamat adalah struktur Amazon Ion yang memiliki dua bidang:strandId dansequenceNo.

Ini adalah nilai literal Ion yang dilambangkan dengan backticks. Misalnya:

`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
'tabel-id'

ID unik dari tabel yang revisi dokumennya ingin Anda edit, dilambangkan dengan tanda kutip tunggal.

'dokumen-id'

ID dokumen unik dari revisi yang akan disunting, dilambangkan dengan tanda kutip tunggal.

Memeriksa apakah redaksi selesai

Saat Anda mengirimkan permintaan redaksi dengan menjalankan prosedur yang disimpan, QLDB memproses redaksi data secara asinkron. Setelah selesai, data pengguna dalam revisi (diwakili olehdata struktur) dihapus secara permanen. Untuk memeriksa apakah permintaan redaksi telah selesai, Anda dapat menggunakan salah satu dari berikut ini:

Setelah redaksi revisi selesai,data struktur revisi digantikan olehdataHash bidang baru. Nilai bidang ini adalah hash Ion daridata struktur yang dihapus, seperti yang ditunjukkan pada contoh berikut. Akibatnya, buku besar mempertahankan integritas data secara keseluruhan dan tetap dapat diverifikasi secara kriptografis melalui operasi API verifikasi yang ada. Untuk mempelajari selengkapnya tentang verifikasi, lihatVerifikasi data di Amazon QLDB.

Contoh redaksi

Pertimbangkan dokumen registrasi kendaraan yang sebelumnya Anda ulasMelakukan Kueri Riwayat Riwayat Revisi. Misalkan Anda ingin menyunting revisi kedua (version:1). Contoh query berikut menunjukkan revisi ini sebelum redaksi. Dalam hasil kueri,data struktur yang akan diedit disorot dalam huruf miring merah.

SELECT * FROM history(VehicleRegistration) AS h WHERE h.metadata.id = 'ADR2Ll1fGsU4Jr4EqTdnQF' --replace with your id AND h.metadata.version = 1
{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17 }, hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}}, data: { VIN: "1HVBBAANXWH544237", LicensePlateNumber: "LS477D", State: "WA", PendingPenaltyTicketAmount: 42.20, ValidFromDate: 2011-10-26T, ValidToDate: 2023-09-25T, Owners: { PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" }, SecondaryOwners: [] }, City: "Bellevue" }, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:1, txTime:2019-06-05T21:01:442d-3Z, txId:"9cArhIQV5xf5Tf5vtsPwPq" } }

CatatanblockAddress dalam hasil query karena Anda harus lulus nilai ini untuk prosedur yangREDACT_REVISION disimpan. Kemudian, temukan ID unikVehicleRegistration tabel dengan menanyakan katalog sistem, sebagai berikut.

SELECT tableId FROM information_schema.user_tables WHERE name = 'VehicleRegistration'

Gunakan ID tabel ini bersama dengan ID dokumen dan alamat blok untuk dijalankanREDACT_REVISION. ID tabel dan ID dokumen adalah literal string yang harus dilampirkan dalam tanda kutip tunggal, dan alamat blok adalah literal Ion yang tertutup dalam backticks. Pastikan untuk mengganti argumen ini dengan nilai-nilai Anda sendiri yang sesuai.

EXEC REDACT_REVISION `{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`, '5PLf9SXwndd63lPaSIa0O6', 'ADR2Ll1fGsU4Jr4EqTdnQF'
Tip

Bila Anda menggunakan konsol QLDB atau shell QLDB untuk query untuk ID tabel atau ID dokumen (atau string nilai literal), nilai yang dikembalikan tertutup dalam tanda kutip ganda. Namun, ketika Anda menentukan ID tabel dan ID dokumen argumen dari prosedur yangREDACT_REVISION disimpan, Anda harus melampirkan nilai-nilai dalam tanda kutip tunggal.

Ini karena Anda menulis pernyataan dalam format PartiQL, tetapi QLDB mengembalikan hasil dalam format Amazon Ion. Untuk rincian tentang sintaks dan semantik PartiQL di QLDB, lihatKueri Ion dengan PartiQL.

Permintaan redaksi yang valid mengembalikan struktur Ion yang mewakili revisi dokumen yang Anda edit, sebagai berikut.

{ blockAddress: { strandId: "JdxjkR9bSYB5jMHWcI464T", sequenceNo: 17 }, tableId: "5PLf9SXwndd63lPaSIa0O6", documentId: "ADR2Ll1fGsU4Jr4EqTdnQF", version: 1 }

Saat Anda menjalankan prosedur tersimpan ini, QLDB memproses permintaan redaksi Anda secara asinkron. Setelah menyelesaikan redaksi,data struktur dihapus secara permanen dan diganti dengan dataHashbidang baru. Nilai bidang ini adalah hash Ion daridata struktur yang dihapus, sebagai berikut.

catatan

dataHashContoh ini disediakan untuk tujuan informasi saja dan bukan nilai hash yang dihitung nyata.

{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17 }, hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}}, dataHash: {{s83jd7sfhsdfhksj7hskjdfjfpIPP/DP2hvionas2d4=}}, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:1, txTime:2019-06-05T21:01:442d-3Z, txId:"9cArhIQV5xf5Tf5vtsPwPq" } }

Menghapus dan menyunting revisi aktif

Revisi dokumen aktif (yaitu, revisi terbaru yang tidak dihapus dari setiap dokumen) tidak memenuhi syarat untuk redaksi data. Sebelum Anda dapat menyunting revisi aktif, Anda harus terlebih dahulu memperbarui atau menghapusnya. Ini memindahkan revisi yang sebelumnya aktif ke riwayat dan membuatnya memenuhi syarat untuk redaksi.

Jika kasus penggunaan Anda mengharuskan seluruh dokumen ditandai sebagai dihapus, Anda pertama kali menggunakan pernyataan DELETE. Sebagai contoh, pernyataan berikut logis menghapusVehicleRegistration dokumen dengan VIN dari1HVBBAANXWH544237.

DELETE FROM VehicleRegistration AS r WHERE r.VIN = '1HVBBAANXWH544237'

Kemudian, sunting revisi sebelumnya sebelum penghapusan ini, seperti yang dijelaskan sebelumnya. Jika diperlukan, Anda juga dapat menyunting revisi sebelumnya secara individual.

Jika kasus penggunaan Anda mengharuskan dokumen untuk tetap aktif, pertama-tama Anda menggunakan pernyataan UPDATE atau FROM untuk mengaburkan atau menghapus bidang yang ingin Anda edit. Proses ini dijelaskan di bagian berikut.

Menyunting bidang tertentu dalam revisi

QLDB tidak mendukung redaksi bidang tertentu dalam revisi dokumen. Untuk melakukannya, pertama-tama Anda dapat menggunakan pernyataan UPDATE-REMOVE atau FROM-REMOVE untuk menghapus bidang yang ada dari revisi. Misalnya, pernyataan berikut menghapusLicensePlateNumber bidang dariVehicleRegistration dokumen dengan VIN dari1HVBBAANXWH544237.

UPDATE VehicleRegistration AS r REMOVE r.LicensePlateNumber WHERE r.VIN = '1HVBBAANXWH544237'

Kemudian, menyunting revisi sebelumnya sebelum penghapusan ini, seperti yang dijelaskan sebelumnya. Jika diperlukan, Anda juga dapat secara individual menyunting revisi sebelumnya yang menyertakan bidang yang sekarang dihapus ini.

Untuk mempelajari cara mengoptimalkan kueri Anda, lanjutkan keMengoptimalkan kinerja kueri.