Menyunting revisi dokumen - Database Buku Besar Amazon Quantum (AmazonQLDB)

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

Menyunting revisi dokumen

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre. SQL

Di AmazonQLDB, sebuah DELETE pernyataan hanya secara logis menghapus dokumen dengan membuat revisi baru yang menandainya sebagai dihapus. QLDBjuga mendukung operasi redaksi data yang memungkinkan Anda menghapus revisi dokumen yang tidak aktif secara permanen dalam riwayat 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 QLDB konsol Amazon.

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 Anda memulai dengan redaksi data diQLDB, pastikan Anda meninjau Pertimbangan dan batasan redaksi di referensi Amazon QLDB PartiQL.

Prosedur tersimpan redaksi

Anda dapat menggunakan prosedur REDACT_REVISION tersimpan untuk menghapus secara permanen revisi individu yang tidak aktif 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 tersimpan satu kali untuk setiap revisi. Anda dapat menyunting satu revisi per transaksi.

Sintaksis

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

Lokasi blok jurnal dari 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. Sebagai contoh:

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

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

'document-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 proses redaksi data secara asinkron. Setelah selesai, data pengguna dalam revisi (diwakili oleh data 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 oleh bidang baru. dataHash Nilai bidang ini adalah hash Ion dari data 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 verifikasi yang ada. API Untuk mempelajari lebih lanjut tentang verifikasi, lihatVerifikasi data di Amazon QLDB.

Contoh redaksi

Pertimbangkan dokumen registrasi kendaraan yang sebelumnya Anda ulasMenanyakan riwayat revisi. Misalkan Anda ingin menyunting revisi kedua ()version:1. Contoh kueri berikut menunjukkan revisi ini sebelum redaksi. Dalam hasil kueri, data struktur yang akan disunting disorot red italics.

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" } }

Perhatikan hasil blockAddress kueri karena Anda harus meneruskan nilai ini ke prosedur yang REDACT_REVISION disimpan. Kemudian, temukan ID unik VehicleRegistration 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 menjalankanREDACT_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 Anda sendiri yang sesuai.

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

Saat Anda menggunakan QLDB konsol atau QLDB shell untuk menanyakan ID tabel atau ID dokumen (atau nilai literal string apa pun), nilai yang dikembalikan diapit tanda kutip ganda. Namun, ketika Anda menentukan ID tabel dan argumen ID dokumen dari prosedur yang REDACT_REVISION disimpan, Anda harus melampirkan nilai dalam tanda kutip tunggal.

Ini karena Anda menulis pernyataan dalam format PartiQL, QLDB tetapi mengembalikan hasil dalam format Amazon Ion. Untuk detail tentang sintaks dan semantik PartiQL di, lihat. QLDB Meminta 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 proses permintaan redaksi Anda secara asinkron. Setelah menyelesaikan redaksi, data struktur dihapus secara permanen dan diganti dengan yang baru dataHash lapangan. Nilai bidang ini adalah hash Ion dari data struktur yang dihapus, sebagai berikut.

catatan

dataHashContoh ini disediakan hanya untuk tujuan informasi dan bukan merupakan nilai hash yang dihitung secara 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 memperbarui atau menghapusnya terlebih dahulu. Ini memindahkan revisi yang sebelumnya aktif ke sejarah dan membuatnya memenuhi syarat untuk redaksi.

Jika kasus penggunaan Anda mengharuskan seluruh dokumen ditandai sebagai dihapus, pertama-tama Anda menggunakan DELETEpernyataan. Misalnya, pernyataan berikut secara logis menghapus VehicleRegistration dokumen dengan aVIN. 1HVBBAANXWH544237

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

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

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

Menyunting bidang tertentu dalam revisi

QLDBtidak mendukung redaksi bidang tertentu dalam revisi dokumen. Untuk melakukannya, pertama-tama Anda dapat menggunakan REMOVE pernyataan UPDATE- REMOVE atau FROM- untuk menghapus bidang yang ada dari revisi. Misalnya, pernyataan berikut menghapus LicensePlateNumber bidang dari VehicleRegistration dokumen dengan VIN a1HVBBAANXWH544237.

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

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

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