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'DELETE
istruzione 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.
Argomenti
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:
-
GetBlock API operation (Operazione API)
-
GetRevision API operation (Operazione API)
-
Funzione di cronologia— Nota: dopo aver completato una redazione nel diario, può essere necessario del tempo prima che le interrogazioni sulla cronologia mostrino il risultato della redazione. Potresti vedere alcune revisioni cancellate prima di altre quando la redazione asincrona viene completata, ma le interrogazioni della cronologia mostreranno i risultati completati alla fine.
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"
}
}
blockAddress
Annotalo 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
campo. Il valore di questo campo è l'hash Ion delladataHash
data
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.