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
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.
Topik
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:
-
Fungsi sejarah— Catatan: Setelah redaksi selesai di jurnal, dibutuhkan beberapa waktu sebelum kueri riwayat menunjukkan hasil redaksi. Anda mungkin melihat beberapa revisi disunting sebelum yang lain karena redaksi asinkron selesai, tetapi kueri riwayat akan menunjukkan hasil yang diselesaikan pada akhirnya.
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
lapangan. Nilai bidang ini adalah hash Ion dari dataHash
data
struktur yang dihapus, sebagai berikut.
catatan
dataHash
Contoh 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.