

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Rédaction de révisions de documents
<a name="working.redaction"></a>

**Important**  
Avis de fin de support : les clients existants pourront utiliser Amazon QLDB jusqu'à la fin du support le 31 juillet 2025. Pour plus de détails, consultez [Migrer un registre Amazon QLDB vers Amazon Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/).

Dans Amazon QLDB, `DELETE` une instruction ne supprime logiquement un document qu'en créant une nouvelle révision qui le marque comme supprimé. QLDB prend également en charge *une opération de rédaction de données* qui vous permet de supprimer définitivement les révisions de document inactives dans l'historique d'un tableau.

**Note**  
Les registres créés avant le 22 juillet 2021 ne sont actuellement pas éligibles à la rédaction. Vous pouvez consulter l'heure de création de votre registre sur la console Amazon QLDB.

L'opération de rédaction supprime uniquement les données utilisateur dans la révision spécifiée et laisse inchangées la séquence du journal et les métadonnées du document. Cela permet de préserver l'intégrité globale des données de votre registre.

Avant de commencer à rédiger des données dans QLDB, assurez-vous de les consulter dans la référence Amazon QLDB partiQL [Considérations et limites relatives à la rédaction](ql-stored-procedures.redact_revision.md#ql-stored-procedures.redact_revision.considerations) *partiQL*.

**Topics**
+ [Procédure stockée de rédaction](#working.redaction.stored-proc)
+ [Vérifier si une rédaction est complète](#working.redaction.check-completion)
+ [Exemple de rédaction](#working.redaction.example)
+ [Supprimer et biffer une révision active](#working.redaction.active-revision)
+ [Rédaction d'un champ particulier dans une révision](#working.redaction.field)

## Procédure stockée de rédaction
<a name="working.redaction.stored-proc"></a>

Vous pouvez utiliser la procédure [RÉDACTION\$1RÉVISION](ql-stored-procedures.redact_revision.md) stockée pour supprimer définitivement une révision individuelle inactive dans un registre. Cette procédure stockée supprime toutes les données utilisateur de la révision spécifiée, à la fois dans le stockage indexé et dans le stockage des journaux. Cependant, la séquence du journal et les métadonnées du document, y compris l'identifiant et le hachage du document, restent inchangées. *Cette opération est irréversible.*

La révision de document spécifiée doit être une révision inactive dans l'historique. La dernière révision active d'un document n'est pas éligible à la rédaction.

Pour supprimer plusieurs révisions, vous devez exécuter la procédure stockée une fois pour chaque révision. Vous pouvez supprimer une révision par transaction.

**Syntaxe**

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

`*block-address*`  
Emplacement du bloc de journal où se trouve la révision du document à supprimer. Une adresse est une structure Amazon Ion qui comporte deux champs : `strandId` et`sequenceNo`.  
Il s'agit d'une valeur littérale ionique qui est indiquée par des backticks. Par exemple :  

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

'*table-id*'  
L'ID unique du tableau dont vous souhaitez supprimer la révision du document, indiqué par des guillemets simples.

'*document-id*'  
L'ID de document unique de la révision à supprimer, indiqué par des guillemets simples.

## Vérifier si une rédaction est complète
<a name="working.redaction.check-completion"></a>

Lorsque vous soumettez une demande de suppression en exécutant la procédure stockée, QLDB traite la rédaction des données de manière asynchrone. Une fois la révision terminée, les données utilisateur (représentées par la `data` structure) sont supprimées définitivement. Pour vérifier si une demande de rédaction est terminée, vous pouvez utiliser l'une des méthodes suivantes :
+ [Exportation de journaux](export-journal.md)
+ [Stream du journal](streams.md)
+ [GetBlock Opération d'API](https://docs.aws.amazon.com/qldb/latest/developerguide/API_GetBlock.html)
+ [GetRevision Opération d'API](https://docs.aws.amazon.com/qldb/latest/developerguide/API_GetRevision.html)
+ [Fonction d'historique](working.history.md#working.history.function)— **Remarque :** une fois qu'une rédaction est terminée dans le journal, il peut s'écouler un certain temps avant que les requêtes d'historique n'affichent le résultat de la rédaction. Il se peut que certaines révisions soient expurgées avant d'autres lorsque la rédaction asynchrone est terminée, mais les requêtes d'historique finiront par afficher les résultats complets.

Une fois la rédaction d'une révision terminée, la `data` structure de la révision est remplacée par un nouveau `dataHash` champ. La valeur de ce champ est le hachage ionique de la `data` structure supprimée, comme indiqué dans l'exemple suivant. Par conséquent, le registre conserve l'intégrité globale de ses données et reste vérifiable cryptographiquement par le biais des opérations d'API de vérification existantes. Pour en savoir plus sur la vérification, consultez[Vérification des données dans Amazon QLDB](verification.md).

## Exemple de rédaction
<a name="working.redaction.example"></a>

Prenez en compte le document d'immatriculation du véhicule que vous avez examiné précédemment[Consultation de l'historique des révisions](working.history.md). Supposons que vous souhaitiez supprimer la deuxième révision (`version:1`). L'exemple de requête suivant montre cette révision avant la rédaction. Dans les résultats de la requête, la `data` structure qui sera expurgée est surlignée dans*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"
    }
}
```

Notez cela `blockAddress` dans les résultats de la requête, car vous devez transmettre cette valeur à la procédure `REDACT_REVISION` stockée. Recherchez ensuite l'ID unique de la `VehicleRegistration` table en interrogeant le [catalogue du système](working.catalog.md), comme suit.

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

Utilisez cet ID de table ainsi que l'ID du document et l'adresse du bloc pour exécuter`REDACT_REVISION`. L'ID de table et l'ID de document sont des chaînes littérales qui doivent être placées entre guillemets simples, et l'adresse du bloc est un littéral Ion entouré de backticks. Assurez-vous de remplacer ces arguments par vos propres valeurs, le cas échéant.

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

**Astuce**  
*Lorsque vous utilisez la console QLDB ou le shell QLDB pour rechercher un ID de table ou de document (ou toute valeur littérale de chaîne), la valeur renvoyée est placée entre guillemets doubles.* Toutefois, lorsque vous spécifiez les arguments ID de table et ID de document de la procédure `REDACT_REVISION` stockée, vous devez placer les valeurs entre guillemets *simples*.  
Cela est dû au fait que vous écrivez des instructions au format partiQL, alors que QLDB renvoie les résultats au format Amazon Ion. Pour plus de détails sur la syntaxe et la sémantique de partiQL dans QLDB, consultez. [Interroger Ion avec PartiQL](ql-reference.query.md)

Une demande de rédaction valide renvoie une structure Ion qui représente la révision du document que vous êtes en train de rédiger, comme suit.

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

Lorsque vous exécutez cette procédure stockée, QLDB traite votre demande de rédaction de manière asynchrone. Une fois la rédaction terminée, la `data` structure est définitivement supprimée et remplacée par un nouveau *`dataHash`* champ. La valeur de ce champ est le hachage ionique de la `data` structure supprimée, comme suit.

**Note**  
Cet `dataHash` exemple est fourni à titre informatif uniquement et n'est pas une véritable valeur de hachage calculée.

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

## Supprimer et biffer une révision active
<a name="working.redaction.active-revision"></a>

Les révisions de document actives (c'est-à-dire les dernières révisions non supprimées de chaque document) ne sont pas éligibles à la rédaction des données. Avant de pouvoir supprimer une révision active, vous devez d'abord la mettre à jour ou la supprimer. Cela place la révision précédemment active dans l'historique et la rend éligible à la rédaction.

Si votre cas d'utilisation nécessite que l'intégralité du document soit marquée comme supprimée, vous devez d'abord utiliser une instruction [DELETE](ql-reference.delete.md). Par exemple, l'instruction suivante supprime logiquement le `VehicleRegistration` document dont le numéro VIN est. `1HVBBAANXWH544237`

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

Rédigez ensuite la révision précédente avant cette suppression, comme décrit précédemment. Si nécessaire, vous pouvez également modifier individuellement les révisions précédentes.

Si votre cas d'utilisation nécessite que le document reste actif, vous devez d'abord utiliser une instruction [UPDATE](ql-reference.update.md) ou [FROM](ql-reference.from.md) pour masquer ou supprimer les champs que vous souhaitez expurger. Ce processus est décrit dans la section suivante.

## Rédaction d'un champ particulier dans une révision
<a name="working.redaction.field"></a>

QLDB ne prend pas en charge la rédaction d'un champ particulier dans le cadre d'une révision de document. Pour ce faire, vous pouvez d'abord utiliser une instruction [UPDATE-REMOVE](ql-reference.update.md) ou [FROM-REMOVE pour supprimer](ql-reference.from.md) un champ existant d'une révision. Par exemple, l'instruction suivante supprime le `LicensePlateNumber` champ du `VehicleRegistration` document dont le numéro VIN est`1HVBBAANXWH544237`.

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

Rédigez ensuite la révision précédente avant cette suppression, comme décrit précédemment. Si nécessaire, vous pouvez également supprimer individuellement toutes les révisions précédentes qui incluent ce champ désormais supprimé.

Pour savoir comment optimiser vos requêtes, passez à[Optimisation des performances des requêtes](working.optimize.md).