Editar revisiones de documentos - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Editar revisiones de documentos

En Amazon QLDB, una instrucción DELETE solo elimina un documento de forma lógica al crear una nueva revisión que lo marca como eliminado. QLDB también permite realizar una operación de edición de datos para eliminar permanentemente las revisiones de documentos inactivos del historial de una tabla.

nota

Cualquier libro mayor que se haya creado antes del 22 de julio de 2021 actualmente no es apto para la edición. Puede ver la hora de creación de su libro mayor en la consola de Amazon QLDB.

La operación de edición elimina solo los datos de usuario de la revisión especificada, sin alterar la secuencia ni los metadatos del documento. Esto mantiene la integridad general de los datos del libro mayor.

Antes de empezar con la redacción de datos en QLDB, asegúrese de revisar Condiciones y limitaciones de edición en la referencia de PartiQL de Amazon QLDB.

Procedimiento almacenado de edición

Puede utilizar el procedimiento almacenado REDACT_REVISION para eliminar permanentemente una revisión individual e inactiva de un libro mayor. Este procedimiento almacenado elimina todos los datos de usuario de la revisión especificada tanto en el almacenamiento indexado como en el del diario. Sin embargo, no modifica la secuencia del diario y los metadatos del documento, incluidos el identificador del documento y el hash. La operación es irreversible.

La revisión del documento especificada debe ser una revisión inactiva en el historial. La última revisión activa de un documento no es apta para ser editada.

Para editar varias revisiones, debe ejecutar el procedimiento almacenado una vez para cada revisión. Puede editar una revisión por transacción.

Sintaxis

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

La ubicación en el bloque del diario de la revisión del documento que se va a editar. La dirección es una estructura de Amazon Ion que consta de dos campos: strandId y sequenceNo.

Se trata de un valor literal de Ion que se indica con acentos graves. Por ejemplo:

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

El identificador único de la tabla cuya revisión del documento desea editar, indicado entre comillas simples.

'document-id'

El identificador único del documento cuya revisión desea editar, indicado entre comillas simples.

Comprobar si una edición está completa

Cuando envía una solicitud de edición ejecutando el procedimiento almacenado, QLDB procesa la edición de los datos de forma asíncrona. Al finalizar, los datos de usuario de la revisión (representados por la estructura data) se eliminan permanentemente. Para comprobar si una solicitud de edición se ha completado, puede utilizar una de las siguientes opciones:

Una vez finalizada la edición de una revisión, la estructura data de la revisión se sustituye por un campo dataHash nuevo. El valor de este campo es el hash de Ion de la estructura data eliminada, como muestra el siguiente ejemplo. Como resultado, el libro mayor mantiene la integridad general de sus datos y sigue siendo verificable criptográficamente mediante las operaciones de la API de verificación existentes. Para obtener más información sobre la verificación, consulte Verificación de datos en Amazon QLDB.

Ejemplo de edición

Tome el documento de registro del vehículo que revisó anteriormente en Consultar el historial de revisiones. Suponga que desea editar la segunda revisión (version:1). El siguiente ejemplo de consulta muestra esta revisión antes de la edición. En los resultados de la consulta, la estructura data que se editará aparece resaltada en cursiva roja.

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

Tome nota de blockAddress en los resultados de la consulta porque debe pasar este valor al procedimiento REDACT_REVISION almacenado. A continuación, busque el identificador único de la tabla VehicleRegistration consultando el catálogo del sistema, de la siguiente manera.

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

Use este identificador de la tabla junto con el identificador del documento y la dirección de bloqueo para ejecutar REDACT_REVISION. El identificador de la tabla y el identificador del documento son literales de cadena que deben escribirse entre comillas simples, y la dirección de bloque es un literal de Ion entre acentos graves. Asegúrese de sustituir estos argumentos por sus propios valores, según proceda.

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

Cuando utiliza la consola de QLDB o el intérprete de comandos de QLDB para consultar un identificador de tabla o un identificador de documento (o cualquier valor literal de cadena), el valor devuelto aparece entre comillas dobles. Sin embargo, al especificar los argumentos del identificador de la tabla y el identificador del documento del procedimiento REDACT_REVISION almacenado, debe escribir los valores entre comillas simples.

Esto se debe a que usted escribe instrucciones en formato PartiQL, pero QLDB devuelve los resultados en formato Amazon Ion. Para obtener más información sobre la sintaxis y la semántica de PartiQL en QLDB, consulte Consulta de Ion con PartiQL.

Una solicitud de edición válida devuelve una estructura de Ion que representa la revisión del documento que está editando, de la siguiente manera.

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

Cuando ejecuta el procedimiento almacenado, QLDB procesa la solicitud de edición de forma asíncrona. Al finalizar la edición, la estructura data se elimina permanentemente y se sustituye por un campo nuevo dataHash. El valor de este campo es el hash de Ion de la estructura data eliminada.

nota

Este ejemplo de dataHash se proporciona únicamente con fines informativos y no es un valor hash real calculado.

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

Eliminar y editar una revisión activa

Las revisiones de documentos activos (es decir, las últimas revisiones no eliminadas de cada documento) no son aptas para la edición de datos. Para poder editar una revisión activa, primero debe actualizarla o eliminarla. Esto mueve la revisión previamente activa al historial y la habilita para su edición.

Si su caso de uso requiere que todo el documento se marque como eliminado, utilice primero una instrucción DELETE. Por ejemplo, la siguiente instrucción elimina de forma lógica el documento VehicleRegistration con un VIN de 1HVBBAANXWH544237.

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

A continuación, edite la revisión anterior antes de eliminarla, tal y como se describió anteriormente. Si es necesario, también puede editar individualmente cualquier revisión anterior.

Si su caso de uso requiere que el documento permanezca activo, utilice primero una instrucción UPDATE o FROM para ocultar o eliminar los campos que desee editar. Este proceso se describe en las secciones siguientes.

Editar un campo concreto de una revisión

QLDB no admite la edición de un campo en particular dentro de la revisión de un documento. Para ello, primero puede utilizar una instrucción UPDATE-REMOVE o FROM-REMOVE para eliminar un campo existente de una revisión. Por ejemplo, la siguiente instrucción elimina el campo LicensePlateNumber del documento VehicleRegistration con un VIN de 1HVBBAANXWH544237.

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

A continuación, edite la revisión anterior antes de eliminarla, tal y como se describió anteriormente. Si es necesario, también puede editar individualmente cualquier revisión anterior que incluya este campo ahora eliminado.

Para obtener información sobre cómo optimizar sus consultas, continúe con Optimizar el rendimiento de las consul‎tas‎.