Rédaction de révisions de documents - Base de données Amazon Quantum Ledger (AmazonQLDB)

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

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 Amazon QLDB Ledger vers Amazon Aurora SQL Postgre.

Sur AmazonQLDB, une DELETE instruction ne supprime logiquement un document qu'en créant une nouvelle révision qui le marque comme supprimé. QLDBprend é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 QLDB console Amazon.

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éesQLDB, assurez-vous de les consulter Considérations et limites relatives à la rédaction dans la référence Amazon QLDB partiQL.

Procédure stockée de rédaction

Vous pouvez utiliser la procédure REDACT_REVISION 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 etsequenceNo.

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

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 :

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 de vérification existantes. API Pour en savoir plus sur la vérification, consultezVérification des données sur Amazon QLDB.

Exemple de rédaction

Prenez en compte le document d'immatriculation du véhicule que vous avez examiné précédemmentConsultation de l'historique des révisions. 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, 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écuterREDACT_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 QLDB console ou le QLDB shell pour rechercher un identifiant de table ou un identifiant 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, mais que vous QLDB renvoyez les résultats au format Amazon Ion. Pour plus de détails sur la syntaxe et la sémantique de partiQL in, consultez. QLDB Interroger Ion avec PartiQL

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, elle 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 une nouvelle dataHash . 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

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 DELETEinstruction. Par exemple, l'instruction suivante supprime logiquement le VehicleRegistration document avec un VIN de. 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 FROMinstruction UPDATEor 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

QLDBne prend pas en charge la rédaction d'un champ spécifique dans une révision de document. Pour ce faire, vous pouvez d'abord utiliser une REMOVE instruction UPDATEFROM- REMOVE ou - pour supprimer un champ existant d'une révision. Par exemple, l'instruction suivante supprime le LicensePlateNumber champ du VehicleRegistration document avec un VIN de1HVBBAANXWH544237.

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, consultezOptimisation des performances des requêtes.