

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon QLDB 中的 REDACT\$1REVISION 存储进程
<a name="ql-stored-procedures.redact_revision"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

**注意**  
2021 年 7 月 22 日之前创建的任何分类账目前都不符合编校资格。您可在 Amazon QLDB 控制台查看分类账的创建时间。

在 Amazon QLDB 中，使用 `REDACT_REVISION` 存储过程永久删除索引存储和日记账存储中的单个非活动文档修订版。此存储过程将删除指定版本的所有用户数据。但是，它将使日记账序列和文档元数据（包括文档 ID 和哈希）保持不变。*该操作不可逆。*

指定的文档修订版本必须是在历史记录中处于非活动状态的修订版。文档的最新有效修订版不符合此编校条件。

通过运行此存储过程提交编校请求后，QLDB 将异步处理数据的编校。修订完成后，指定修订的用户数据（由 `data` 结构表示）将被新的 `dataHash` 字段替换。该字段的值是已移除 `data` 结构的 [Amazon Ion](ion.md) 哈希。因此，分类账保持了其整体数据的完整性，并通过现有验证 API 操作保持加密可验证性。

有关使用示例数据编校操作的示例，请参见[对文档修订版执行编校](working.redaction.md)中的[编校示例](working.redaction.md#working.redaction.example)。

**注意**  
要了解如何控制在指定表中运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**Topics**
+ [

## 修订注意事项和限制
](#ql-stored-procedures.redact_revision.considerations)
+ [

## 语法
](#ql-stored-procedures.redact_revision.syntax)
+ [

## Arguments
](#ql-stored-procedures.redact_revision.arguments)
+ [

## 返回值
](#ql-stored-procedures.redact_revision.return)
+ [

## 示例
](#ql-stored-procedures.redact_revision.examples)

## 修订注意事项和限制
<a name="ql-stored-procedures.redact_revision.considerations"></a>

开始在 Amazon QLDB 中进行数据编校之前，请务必查看以下注意事项和限制：
+ `REDACT_REVISION` 存储过程以单个非活动文档修订版中的用户数据为目标。若要编校多个修订版，必须为每个修订版运行一次存储进程。您可为每笔事务编校一个修订版。
+ 若要编校文档修订版中的特定字段，必须先使用单独的数据操作语言（DML）语句修改修订版。有关更多信息，请参阅 [编校修订版本中的特定字段](working.redaction.md#working.redaction.field)。
+ QLDB 收到编校请求后，您将无法取消或更改该请求。若要确认编校是否已完成，您可以检查修订的`data`结构是否已被`dataHash`字段所取代。要了解更多信息，请参阅 [检查编校是否已完成](working.redaction.md#working.redaction.check-completion)。
+ 编校对 QLDB 服务之外复制的任何 QLDB 数据没有影响。这包括 Amazon S3 的任何导出以及 Amazon Kinesis Data Streams 的任何导出。您必须使用其他数据保留方法管理存储在 QLDB 之外的任何数据。
+ 编校对日记账中记录的 PartiQL 语句的文字值没有影响。根据最佳实践标准，您应使用变量占位符而非文字值，以编程方式运行参数化语句。占位符以问号（`?`）的形式写在日记账内，而不是任何可能需要编校的敏感信息。

  若要了解如何使用 QLDB 驱动程序以编程方式运行 PartiQL 语句，请参阅[驱动程序入门](getting-started-driver.md)中每种支持的编程语言的教程。

## 语法
<a name="ql-stored-procedures.redact_revision.syntax"></a>

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

## Arguments
<a name="ql-stored-procedures.redact_revision.arguments"></a>

`*block-address*`  
要编校的文档修订版本的日记账数据块位置。地址是一种包含两个字段的 Amazon Ion 结构：`strandId` 和 `sequenceNo`。  
这是一个 Ion 字面值，以反引号表示。例如：  

```
`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
```
要了解如何查找数据块地址，请参阅 [查询文档元数据](working.metadata.md)。

'*table-id*'  
待编校修订版本的表的唯一 ID，用单引号表示。  
若要了解如何查找表 ID，请参阅 [查询系统目录](working.catalog.md)。

'*document-id*'  
待编校修订版本的唯一文档 ID，用单引号表示。  
若要了解如何查找文档 ID，请参阅 [查询文档元数据](working.metadata.md)。

## 返回值
<a name="ql-stored-procedures.redact_revision.return"></a>

表示要编校文档修订版的 Amazon Ion 结构，格式如下。

```
{
  blockAddress: {
    strandId: String,
    sequenceNo: Int
  },
  tableId: String,
  documentId: String,
  version: Int
}
```

**返回结构字段**
+ `blockAddress` — 要编校的修订版本的日记账数据块位置。地址包含以下两个字段。
  + `strandId` — 包含数据块的日记账链的唯一 ID。
  + `sequenceNo` — 一个索引号，用于指定数据块在链中的位置。
+ `tableId` — 您正在编校其修订版本的表的唯一 ID。
+ `documentId` — 要编校的修订版本的唯一文档 ID。
+ `version` — 要编校的文档修订版的版本号。

下面是含采样数据的返回结构示例。

```
{
  blockAddress: {
    strandId: "CsRnx0RDoNK6ANEEePa1ov",
    sequenceNo: 134
  },
  tableId: "6GZumdHggklLdMGyQq9DNX",
  documentId: "IXlQPSbfyKMIIsygePeKrZ",
  version: 0
}
```

## 示例
<a name="ql-stored-procedures.redact_revision.examples"></a>

```
EXEC REDACT_REVISION `{strandId:"7z2P0AyQKWD8oFYmGNhi8D", sequenceNo:7}`, '8F0TPCmdNQ6JTRpiLj2TmW', '05K8zpGYWynDlEOK5afDRc'
```