Redazione delle revisioni dei documenti - Database Amazon Quantum Ledger (Amazon QLDB)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Redazione delle revisioni dei documenti

In Amazon QLDB, un'DELETEistruzione elimina un documento solo in modo logico creando una nuova revisione che lo contrassegna come eliminato. QLDB supporta anche un'operazione di redazione dei dati che consente di eliminare definitivamente le revisioni dei documenti inattivi nella cronologia di una tabella.

Nota

I registri creati prima del 22 luglio 2021 non sono attualmente idonei alla redazione. Puoi visualizzare l'ora di creazione del tuo libro contabile sulla console Amazon QLDB.

L'operazione di redazione elimina solo i dati utente nella revisione specificata e lascia invariati la sequenza del diario e i metadati del documento. Ciò mantiene l'integrità complessiva dei dati del registro.

Prima di iniziare con la redazione dei dati in QLDB, assicurati di esaminarliConsiderazioni e limitazioni nel riferimento Amazon QLDB PartiQL.

Stored procedure

È possibile utilizzare la proceduraREVISIONE_REDAZIONE memorizzata per eliminare definitivamente una singola revisione inattiva in un libro mastro. Questa procedura memorizzata elimina tutti i dati utente nella revisione specificata sia nell'archiviazione indicizzata che nell'archiviazione del journal. Tuttavia, lascia invariati la sequenza del diario e i metadati del documento, inclusi l'ID e l'hash del documento. Questa operazione è irreversibile.

La revisione del documento specificata deve essere una revisione inattiva nella cronologia. L'ultima revisione attiva di un documento non è idonea alla redazione.

Per oscurare più revisioni, è necessario eseguire la stored procedure una volta per ogni revisione. Puoi oscurare una revisione per transazione.

Sintassi

EXEC REDACT_REVISION `block-address`, 'table-id', 'document-id'
Argomenti
`indirizzo di blocco`

La posizione del blocco del diario in cui si trova la revisione del documento da oscurare. Un indirizzo è una struttura Amazon Ion con due campi:strandId esequenceNo.

Questo è un valore letterale di Ion che viene indicato con contrassegni. Ad esempio:

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

L'ID univoco della tabella di cui si desidera oscurare la revisione del documento, indicato da virgolette singole.

'id del documento'

L'ID univoco del documento della revisione da oscurare, indicato da virgolette singole.

Verificare se una redazione è completa

Quando si invia una richiesta di redazione eseguendo la procedura memorizzata, QLDB elabora la redazione dei dati in modo asincrono. Al termine, i dati utente nella revisione (rappresentati dalladata struttura) vengono rimossi definitivamente. Per verificare se una richiesta di redazione è stata completata, puoi utilizzare uno dei seguenti:

Una volta completata la redazione della revisione, ladata struttura della revisione viene sostituita da un nuovodataHash campo. Il valore di questo campo è l'hash Ion delladata struttura rimossa, come mostrato nell'esempio seguente. Di conseguenza, il libro mastro mantiene l'integrità complessiva dei dati e rimane verificabile crittograficamente tramite le operazioni API di verifica esistenti. Per ulteriori informazioni sulla verifica, consultaVerifica dei dati in Amazon QLDB.

Esempio di redazione

Considera il documento di immatricolazione del veicolo che hai esaminato in precedenzaEsecuzione di query sulla cronologia delle revisioni. Supponiamo che si desideri redigere la seconda revisione (version:1). L'esempio di interrogazione seguente mostra questa revisione prima della redazione. Nei risultati della query, ladata struttura che verrà oscurata è evidenziata in corsivo rosso.

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

blockAddressAnnotalo nei risultati della query perché devi passare questo valore allaREDACT_REVISION stored procedure. Quindi, trova l'ID univoco dellaVehicleRegistration tabella interrogando il catalogo di sistema, come segue.

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

Utilizza questo ID di tabella insieme all'ID del documento e all'indirizzo del blocco per eseguireREDACT_REVISION. L'ID della tabella e l'ID del documento sono stringhe letterali che devono essere racchiuse tra virgolette singole e l'indirizzo del blocco è un valore letterale Ion racchiuso tra virgolette. Assicurati di sostituire questi argomenti con i tuoi valori, a seconda dei casi.

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

Quando si utilizza la console QLDB o la shell QLDB per richiedere un ID di tabella o un ID di documento (o qualsiasi valore letterale di una stringa), il valore restituito è racchiuso tra virgolette doppie. Tuttavia, quando si specificano gli argomenti ID della tabella e dell'ID del documento dellaREDACT_REVISION stored procedure, è necessario racchiudere i valori tra virgolette singole.

Questo perché si scrivono istruzioni in formato PartiQL, ma QLDB restituisce i risultati in formato Amazon Ion. Per dettagli sulla sintassi e sulla semantica di PartiQL in QLDB, vedereInterrogare Ion con PartiQL.

Una richiesta di redazione valida restituisce una struttura Ion che rappresenta la revisione del documento che si sta oscurando, come segue.

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

Quando si esegue questa procedura memorizzata, QLDB elabora la richiesta di redazione in modo asincrono. Al termine della redazione, ladata struttura viene rimossa definitivamente e sostituita da un nuovo dataHashcampo. Il valore di questo campo è l'hash Ion delladata struttura rimossa, come segue.

Nota

QuestodataHash esempio viene fornito solo a scopo informativo e non è un valore hash calcolato reale.

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

Eliminazione e redazione di una revisione attiva

Le revisioni attive dei documenti (ovvero le ultime revisioni non eliminate di ogni documento) non sono idonee alla redazione dei dati. Prima di poter oscurare una revisione attiva, è necessario aggiornarla o eliminarla. In questo modo la revisione precedentemente attiva viene spostata nella cronologia e la rende idonea alla redazione.

Se il tuo caso d'uso richiede che l'intero documento sia contrassegnato come eliminato, devi prima utilizzare un'istruzione DELETE. Ad esempio, la seguente dichiarazione elimina logicamente ilVehicleRegistration documento con un VIN di1HVBBAANXWH544237.

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

Quindi, redigi la revisione precedente prima di questa eliminazione, come descritto in precedenza. Se necessario, puoi anche redigere individualmente eventuali revisioni precedenti.

Se il tuo caso d'uso richiede che il documento rimanga attivo, devi prima utilizzare un'istruzione UPDATE o FROM per oscurare o rimuovere i campi che desideri oscurare. Questo processo è descritto nella sezione seguente.

Redazione di un campo particolare all'interno di una revisione

QLDB non supporta la redazione di un campo particolare all'interno di una revisione del documento. A tale scopo, è possibile innanzitutto utilizzare un'istruzione UPDATE-REMOVE o FROM-REMOVE per rimuovere un campo esistente da una revisione. Ad esempio, la seguente dichiarazione rimuove ilLicensePlateNumber campo dalVehicleRegistration documento con un VIN di1HVBBAANXWH544237.

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

Quindi, redigi la revisione precedente prima di questa rimozione, come descritto in precedenza. Se necessario, puoi anche redigere individualmente eventuali revisioni precedenti che includono questo campo ora rimosso.

Per scoprire come ottimizzare le tue interrogazioni, procedi aOttimizzazione delle prestazioni delle query.