Redigir revisões de documentos - Banco de dados Amazon Quantum Ledger (AmazonQLDB)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Redigir revisões de documentos

Importante

Aviso de fim do suporte: os clientes existentes poderão usar a Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte Migrar um Amazon QLDB Ledger para o Amazon Aurora Postgre. SQL

Na AmazonQLDB, uma DELETE declaração só exclui logicamente um documento criando uma nova revisão que o marca como excluído. QLDBtambém oferece suporte a uma operação de redação de dados que permite excluir permanentemente revisões de documentos inativas no histórico de uma tabela.

nota

No momento, todos os ledgers criados antes de 22 de julho de 2021 não são elegíveis para edição. Você pode ver a hora de criação do seu livro contábil no QLDB console da Amazon.

A operação de redação exclui somente os dados do usuário na revisão especificada e deixa a sequência do diário e os metadados do documento inalterados. Isso mantém a integridade geral dos dados do seu ledger.

Antes de começar com a redação de dadosQLDB, certifique-se de revisar Considerações e limitações de edição na referência do Amazon QLDB PartiQL.

Procedimentos de redação armazenados

Você pode usar o procedimento REDACT_REVISION armazenado para excluir permanentemente uma revisão individual inativa em um ledger. Esse procedimento armazenado exclui todos os dados do usuário na revisão especificada, tanto no armazenamento indexado quanto no armazenamento do diário. No entanto, deixa a sequência do diário e os metadados do documento, incluindo o ID e o hash do documento, inalterados. Essa operação é irreversível.

A revisão do documento especificada deve ser uma revisão inativa no histórico. A revisão ativa mais recente de um documento não está qualificada para redação.

Para editar várias revisões, você deve executar o procedimento armazenado uma vez para cada revisão. Você pode editar uma revisão por transação.

Sintaxe

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

A localização do bloco de diário da revisão do documento a ser editada. Um endereço é uma estrutura Amazon Ion que tem dois campos: strandId e sequenceNo.

Esse é um valor literal de Ion indicado por acentos graves. Por exemplo: .

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

O ID exclusivo da tabela cuja revisão do documento você deseja redigir, indicada por aspas simples.

'document-id'

O ID exclusivo do documento cuja revisão será redigida, indicada por aspas simples.

Verificar se uma redação está completa

Quando você envia uma solicitação de redação executando o procedimento armazenado, QLDB processa a redação dos dados de forma assíncrona. Após a conclusão, os dados do usuário na revisão (representados pela estrutura data) são removidos permanentemente. Para conferir se uma solicitação de redação foi concluída, é possível usar um dos seguintes:

Depois que a redação de uma revisão for concluída, a estrutura data da revisão será substituída por um novo campo dataHash. O valor desse campo é o hash de Ion da estrutura data removida, conforme mostrado no exemplo a seguir. Como resultado, o livro mantém a integridade geral dos dados e permanece criptograficamente verificável por meio das operações de verificação existentes. API Para saber mais sobre verificação, consulte Verificação de dados na Amazon QLDB.

Exemplo de redação

Considere o documento de registro do veículo que você revisou anteriormente em Consultar o histórico de revisões. Vamos supor que você queira redigir a segunda revisão (version:1). O exemplo de consulta a seguir mostra essa revisão antes da redação. Nos resultados da consulta, a data estrutura que será editada é destacada em 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" } }

Observe o blockAddress nos resultados da consulta porque você precisa passar esse valor para o procedimento REDACT_REVISION armazenado. Em seguida, encontre o ID exclusivo da tabela VehicleRegistration, consultando o catálogo do sistema, da seguinte forma.

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

Use esse ID da tabela junto com o ID do documento e o endereço do bloco para executar REDACT_REVISION. O ID da tabela e o ID do documento são literais de sequência de caracteres que devem estar entre aspas simples, e o endereço do bloco é um literal de Ion que está entre acentos graves. Certifique-se de substituir esses argumentos pelos seus próprios valores, conforme adequado.

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

Quando você usa o QLDB console ou o QLDB shell para consultar uma ID de tabela ou ID de documento (ou qualquer valor literal de cadeia de caracteres), o valor retornado é colocado entre aspas duplas. No entanto, ao especificar os argumentos de ID da tabela e ID do documento do procedimento REDACT_REVISION armazenado, você deve colocar os valores entre aspas simples.

Isso ocorre porque você escreve instruções no formato partiQL, mas QLDB retorna os resultados no formato Amazon Ion. Para obter detalhes sobre a sintaxe e a semântica do partiQL em, consulte. QLDB Consultar o Ion com o PartiQL

Uma solicitação de redação válida retorna uma estrutura de Ion que representa a revisão do documento que você está editando, da seguinte forma.

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

Quando você executa esse procedimento armazenado, QLDB processa sua solicitação de redação de forma assíncrona. Após a conclusão da redação, a data estrutura é removida permanentemente e substituída por uma nova dataHash campo. O valor desse campo é o hash de Ion da estrutura data removida.

nota

Esse exemplo de dataHash é fornecido apenas para fins informativos e não é um valor real de hash 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" } }

Excluir e editar uma revisão ativa

As revisões ativas de documentos (ou seja, as últimas revisões não excluídas de cada documento) não são elegíveis para redação de dados. Antes de redigir uma revisão ativa, você deve primeiro atualizá-la ou excluí-la. Isso move a revisão anteriormente ativa para o histórico e a torna elegível para redação.

Se seu caso de uso exigir que todo o documento seja marcado como excluído, primeiro use uma DELETEdeclaração. Por exemplo, a instrução a seguir exclui logicamente o VehicleRegistration documento com um VIN de. 1HVBBAANXWH544237

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

Em seguida, edite a revisão anterior antes dessa exclusão, conforme descrito anteriormente. Se necessário, você também pode redigir individualmente quaisquer revisões anteriores.

Se seu caso de uso exigir que o documento permaneça ativo, primeiro use uma FROMinstrução UPDATEou para ocultar ou remover os campos que você deseja redigir. Esse processo é descrito na seção a seguir.

Editar um campo específico em uma revisão

QLDBnão suporta a redação de um campo específico em uma revisão do documento. Para fazer isso, você pode primeiro usar uma REMOVE instrução UPDATEFROM- REMOVE ou - para remover um campo existente de uma revisão. Por exemplo, a instrução a seguir remove o LicensePlateNumber campo do VehicleRegistration documento com um VIN de1HVBBAANXWH544237.

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

Em seguida, edite a revisão anterior antes dessa exclusão, conforme descrito anteriormente. Se necessário, você também pode redigir individualmente quaisquer revisões anteriores que incluam esse campo agora removido.

Para saber como otimizar suas consultas, vá para Otimizar a performance da consulta.