

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
<a name="working.redaction"></a>

**Importante**  
Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto, il 31/07/2025. Per ulteriori dettagli, consulta [Migrare un registro Amazon QLDB su Amazon Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/).

In Amazon QLDB, `DELETE` un'istruzione elimina logicamente un documento solo 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 inattive dei documenti 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 mastro 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 consultarla nel riferimento Amazon QLDB [Considerazioni e limitazioni sulla redazione](ql-stored-procedures.redact_revision.md#ql-stored-procedures.redact_revision.considerations) *PartiQL*.

**Topics**
+ [Procedura di redazione memorizzata](#working.redaction.stored-proc)
+ [Verifica se una redazione è completa](#working.redaction.check-completion)
+ [Esempio di redazione](#working.redaction.example)
+ [Eliminazione e redazione di una revisione attiva](#working.redaction.active-revision)
+ [Oscurare un particolare campo all'interno di una revisione](#working.redaction.field)

## Procedura di redazione memorizzata
<a name="working.redaction.stored-proc"></a>

È possibile utilizzare la [REDACT\$1REVISION](ql-stored-procedures.redact_revision.md) stored procedure per eliminare definitivamente una singola revisione inattiva in un registro. Questa stored procedure elimina tutti i dati utente nella revisione specificata sia nella memoria indicizzata che nella memorizzazione del diario. 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 per la redazione.

Per redigere più revisioni, è necessario eseguire la stored procedure una volta per ogni revisione. È possibile redigere una revisione per transazione.

**Sintassi**

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

`*block-address*`  
La posizione nel blocco del journal della revisione del documento da redigere. Un indirizzo è una struttura Amazon Ion con due campi: `strandId` e`sequenceNo`.  
Si tratta di un valore letterale Ion indicato da backtick. Per esempio:  

```
`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
```

'*table-id*'  
L'ID univoco della tabella di cui si desidera redigere la revisione del documento, indicato da virgolette singole.

'*document-id*'  
L'ID univoco del documento della revisione da oscurare, indicato da virgolette singole.

## Verifica se una redazione è completa
<a name="working.redaction.check-completion"></a>

Quando si invia una richiesta di redazione eseguendo la stored procedure, QLDB elabora la redazione dei dati in modo asincrono. Al termine, i dati utente presenti nella revisione (rappresentati dalla struttura) vengono rimossi definitivamente. `data` Per verificare se una richiesta di redazione è stata completata, puoi utilizzare uno dei seguenti:
+ [Esportazione delle riviste](export-journal.md)
+ [Stream del diario](streams.md)
+ [GetBlock API operation](https://docs.aws.amazon.com/qldb/latest/developerguide/API_GetBlock.html) (Operazione API)
+ [GetRevision API operation](https://docs.aws.amazon.com/qldb/latest/developerguide/API_GetRevision.html) (Operazione API)
+ [Funzione di cronologia](working.history.md#working.history.function)— **Nota:** una volta completata una redazione nel diario, può essere necessario del tempo prima che le interrogazioni cronologiche mostrino il risultato della redazione. È possibile che alcune revisioni vengano oscurate prima di altre, poiché la redazione asincrona viene completata, ma alla fine le interrogazioni cronologiche mostreranno i risultati completati.

Una volta completata la redazione di una revisione, la struttura della revisione viene sostituita da un nuovo campo. `data` `dataHash` Il valore di questo campo è l'hash ionico della `data` struttura rimossa, come illustrato nell'esempio seguente. Di conseguenza, il registro mantiene l'integrità complessiva dei dati e rimane verificabile crittograficamente tramite le operazioni API di verifica esistenti. Per ulteriori informazioni sulla verifica, consulta. [Verifica dei dati in Amazon QLDB](verification.md)

## Esempio di redazione
<a name="working.redaction.example"></a>

Considera il documento di immatricolazione del veicolo che hai precedentemente esaminato. [Interrogare la cronologia delle revisioni](working.history.md) Supponiamo di voler redigere la seconda revisione (). `version:1` Il seguente esempio di query mostra questa revisione prima della redazione. Nei risultati della query, la `data` struttura che verrà oscurata è evidenziata in. *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"
    }
}
```

`blockAddress`Annotatelo nei risultati della query perché è necessario passare questo valore alla `REDACT_REVISION` stored procedure. Quindi, trova l'ID univoco della `VehicleRegistration` tabella interrogando il [catalogo di sistema](working.catalog.md), 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 di blocco per eseguire`REDACT_REVISION`. L'ID della tabella e l'ID del documento sono stringhe letterali che devono essere racchiuse tra virgolette singole e l'indirizzo di blocco è un valore letterale Ion racchiuso tra virgolette. Assicurati di sostituire questi argomenti con i tuoi valori, se necessario.

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

**Suggerimento**  
*Quando si utilizza la console QLDB o la shell QLDB per richiedere un ID tabella o un ID documento (o qualsiasi valore letterale di stringa), il valore restituito viene racchiuso tra virgolette doppie.* *Tuttavia, quando si specificano gli argomenti ID tabella e ID documento della `REDACT_REVISION` stored procedure, è necessario racchiudere i valori tra virgolette singole.*  
Questo perché scrivi istruzioni in formato PartiQL, ma QLDB restituisce risultati in formato Amazon Ion. Per i dettagli sulla sintassi e la semantica di PartiQL in QLDB, vedere. [Interrogare Ion con PartiQL](ql-reference.query.md)

Una richiesta di redazione valida restituisce una struttura ionica che rappresenta la revisione del documento da oscurare, 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, la `data` struttura viene rimossa definitivamente e sostituita da un nuovo campo. *`dataHash`* Il valore di questo campo è l'hash ionico della `data` struttura rimossa, come segue.

**Nota**  
Questo `dataHash` 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
<a name="working.redaction.active-revision"></a>

Le revisioni attive dei documenti (ovvero le ultime revisioni non eliminate di ogni documento) non sono idonee per la 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 per la redazione.

Se il tuo caso d'uso richiede che l'intero documento sia contrassegnato come eliminato, devi prima utilizzare un'istruzione [DELETE](ql-reference.delete.md). Ad esempio, l'istruzione seguente elimina logicamente il `VehicleRegistration` documento con un VIN di. `1HVBBAANXWH544237`

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

Quindi, redigete la revisione precedente prima di questa eliminazione, come descritto in precedenza. Se necessario, puoi anche oscurare singolarmente eventuali revisioni precedenti.

Se il tuo caso d'uso richiede che il documento rimanga attivo, devi innanzitutto utilizzare un'istruzione [UPDATE](ql-reference.update.md) o [FROM](ql-reference.from.md) per oscurare o rimuovere i campi che desideri oscurare. Questo processo è descritto nella sezione seguente.

## Oscurare un particolare campo all'interno di una revisione
<a name="working.redaction.field"></a>

QLDB non supporta la redazione di un particolare campo all'interno di una revisione del documento. A tale scopo, puoi prima utilizzare un'istruzione [UPDATE-REMOVE o FROM-REMOVE per rimuovere](ql-reference.update.md) [un campo esistente da](ql-reference.from.md) una revisione. Ad esempio, l'istruzione seguente rimuove il `LicensePlateNumber` campo dal `VehicleRegistration` documento con un VIN di. `1HVBBAANXWH544237`

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

Quindi, redigete la revisione precedente prima di questa rimozione, come descritto in precedenza. Se necessario, puoi anche oscurare singolarmente tutte le revisioni precedenti che includono questo campo ora rimosso.

Per informazioni su come ottimizzare le query, procedi con. [Ottimizzazione delle prestazioni delle query](working.optimize.md)