

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

# Amazon S3 目标数据验证
<a name="CHAP_Validating_S3"></a>

AWS DMS 支持验证 Amazon S3 目标中复制的数据。由于复制的数据以平面文件形式 AWS DMS 存储在 Amazon S3 中，因此我们使用 [Amazon A](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) t `CREATE TABLE AS SELECT` hena (CTAS) 查询来验证数据。

对存储在 Amazon S3 中的数据进行查询的计算量很大。因此，在更改数据捕获 (CDC) 期间，每天仅在世界标准时间午夜 (00:00) 对 Amazon S3 数据 AWS DMS 运行一次验证。 AWS DMS 运行的每项每日验证都称为间*隔验证*。在间隔验证期间， AWS DMS 验证过去 24 小时内迁移到目标 Amazon S3 存储桶的所有更改记录。有关间隔验证限制的更多信息，请参阅[使用 S3 目标验证的限制](#CHAP_Validating_S3_limitations)。

Amazon S3 目标验证使用 Amazon Athena，因此需要支付额外费用。有关更多信息，请参阅 [Amazon Athena 定价](https://aws.amazon.com/athena/pricing/)。

**注意**  
S3 目标验证需要 AWS DMS 版本 3.5.0 或更高版本。

**Topics**
+ [先决条件](#CHAP_Validating_S3_prerequisites)
+ [Permissions](#CHAP_Validating_S3_permissions)
+ [限制](#CHAP_Validating_S3_limitations)
+ [仅验证任务](#CHAP_Validating_S3_only)

## S3 目标验证先决条件
<a name="CHAP_Validating_S3_prerequisites"></a>

在使用 S3 目标验证之前，请检查以下设置和权限：
+ 将端点的 [S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html) 的 `DataFormat` 值设置为 `parquet`。有关更多信息，请参阅 [S3 的 Parquet 设置](CHAP_Target.S3.md#CHAP_Target.S3.EndpointSettings.Parquet)。
+ 确保向用于创建迁移任务的用户账户分配的角色具有以下一系列权限。参见下文中的[Permissions](#CHAP_Validating_S3_permissions)。

对于使用持续复制（CDC）的任务，请检查以下设置：
+ 启用补充日志，这样您就可获得 CDC 数据的完整记录。有关启用补充日志记录的信息，请参阅本指南[故障排除和诊断支持排除延迟问题](CHAP_Troubleshooting.md)部分中的[自动将补充日志记录添加到 Oracle 源端点](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Oracle.AutoSupplLogging)。
+ 为目标端点设置 `TimestampColumnName` 参数。对时间戳列名没有限制。有关更多信息，请参阅 [S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html)。
+ 为目标设置基于日期的文件夹分区。有关更多信息，请参阅 [使用基于日期的文件夹分区](CHAP_Target.S3.md#CHAP_Target.S3.DatePartitioning)。

## 使用 S3 目标验证的权限
<a name="CHAP_Validating_S3_permissions"></a>

要设置访问权限以使用 S3 目标验证，请确保向用于创建迁移任务的用户账户分配的角色具有以下一系列权限。请将示例值替换为您的值。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:CreateWorkGroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetTables",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:GetTable"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 使用 S3 目标验证的限制
<a name="CHAP_Validating_S3_limitations"></a>

查看使用 S3 目标验证时适用的以下其他限制。有关适用于所有验证的限制，请参阅[限制](CHAP_Validating.md#CHAP_Validating.Limitations)。
+ 您的 `DatePartitionSequence` 值需要一个 Day 组件。S3 目标验证不支持 `YYYYMM` 格式。
+ 在 CDC 期间运行间隔验证时，您可能会在 `awsdms_validation_failures_v1` 表中看到虚假的验证错误。之所以出现这些错误，是因为会将间隔验证期间收到的更改 AWS DMS 迁移到第二天的分区文件夹中。通常，这些更改会写入当天的分区文件夹。这些虚假错误限制了对从动态源数据库复制到静态目标（例如 Amazon S3）的验证。要调查这些虚假错误，请检查验证时段（00:00 UTC）快要结束时的记录，错误通常出现在这些时候。

  要尽可能减少虚假错误的数量，请确保任务的 `CDCLatencySource` 较低。有监控延迟的信息，请参阅[复制任务指标](CHAP_Monitoring.md#CHAP_Monitoring.Metrics.Task)。
+ 处于 `failed` 或 `stopped` 状态的任务不验证前一天的更改。要最大限度地减少由于意外失败而导致的验证错误，请使用相同的表映射以及源端点和目标端点，创建单独的仅验证任务。有关仅验证任务的更多信息，请参阅[通过 S3 目标验证使用仅验证任务](#CHAP_Validating_S3_only)。
+ 表统计数据中的**验证状态**列反映了最近一次间隔验证的状态。因此，存在不匹配的表可能会在第二天的间隔验证后显示为已验证。检查目标 Amazon S3 存储桶中的 `s3_validation_failures folder` 是否存超过一天之前发生的不匹配情况。
+ S3 验证使用 Amazon Athena 的分桶表特征。这允许 S3 验证创建目标表数据的分桶副本。这意味着表数据的副本分成多个子集，这些子集与 DMS 验证的内部分区相匹配。Athena 分桶表的存储桶上限为 10 万个。S3 验证尝试验证的任何超过此限制的表都将无法通过验证。S3 验证尝试创建的存储桶数等于以下值：

  ```
  (#records in the table) / (validation partition size setting)
  ```

  要解决此限制，请增加验证分区大小设置，使 S3 验证创建的存储桶数小于 10 万。有关分桶的更多信息，请参阅《Amazon Athena 用户指南》**中的[在 Athena 中进行分区和分桶](https://docs.aws.amazon.com/athena/latest/ug/ctas-partitioning-and-bucketing.html)。
+ 表名称不得包含除下划线之外的特殊字符。

  S3 验证使用 Amazon Athena，它不支持在表名中使用特殊字符（下划线除外）。有关更多信息，请参阅《Amazon Athena 用户指南》中的 [CREATE TABLE](https://docs.aws.amazon.com/athena/latest/ug/create-table.html) 主题。
+ 当对由 La AWS ke Formation 管理的 Amazon S3 目标使用 AWS DMS 数据验证功能时，验证过程会失败。这可能会导致数据一致性问题。

## 通过 S3 目标验证使用仅验证任务
<a name="CHAP_Validating_S3_only"></a>

*仅验证任务*在不运行迁移的情况下对要迁移的数据进行验证。

即使迁移任务停止，仅限验证的任务也会继续运行，这样可以确保 AWS DMS 不会错过 00:00 UTC 间隔验证窗口。

在 Amazon S3 目标端点上使用仅验证任务有以下限制：
+ 启用了仅验证设置的 Amazon S3 完全加载任务验证是受支持的，但操作方式与其他端点的完全加载和仅验证任务不同。对于作为目标的 S3，此类任务仅针对 S3 目标中的完全加载数据进行验证，不会针对作为 CDC 迁移的一部分迁移的任何数据进行验证。仅使用此功能来验证由仅完全加载任务创建的数据。使用此模式，对于正在运行 CDC 任务的目标，对其中的数据进行验证不会得到有效的验证。
+ 仅验证任务仅验证自上次间隔验证窗口（00:00 UTC）以来的更改。仅验证任务不会验证前一天的完全加载数据或 CDC 数据。