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
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.
Tópicos
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
esequenceNo
.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:
-
Função de histórico – Nota: depois que uma redação é concluída no diário, pode levar algum tempo até que as consultas do histórico mostrem o resultado da redação. Talvez você veja algumas revisões serem editadas antes de outras quando a redação assíncrona for concluída, mas as consultas ao histórico mostrarão os resultados concluídos eventualmente.
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
campo. O valor desse campo é o hash de Ion da estrutura dataHash
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.