Amazon S3 目标数据验证 - Amazon 数据库迁移服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon S3 目标数据验证

Amazon DMS 支持验证 Amazon S3 目标中复制的数据。由于 Amazon DMS 将复制的数据以平面文件形式存储在 Amazon S3 中,因此我们使用 Amazon Athena CREATE TABLE AS SELECT (CTAS) 查询来验证数据。

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

Amazon S3 目标验证使用 Amazon Athena,因此需要支付额外费用。有关更多信息,请参阅 Amazon Athena 定价

注意

S3 目标验证需要 Amazon DMS 版本 3.5.0 或更高版本。

S3 目标验证先决条件

在使用 S3 目标验证之前,请检查以下设置和权限:

  • 将端点的 S3SettingsDataFormat 值设置为 parquet。有关更多信息,请参见 S3 的 Parquet 设置

  • 确保向用于创建迁移任务的用户账户分配的角色具有以下一系列权限。参见下文中的权限

对于使用持续复制 (CDC) 的任务,请检查以下设置:

使用 S3 目标验证的权限

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:CreateWorkGroup" ], "Resource": "arn:aws:athena:<endpoint_region_code>:<account_id>:workgroup/dms_validation_workgroup_for_task_*" }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetTables", "glue:CreateTable", "glue:DeleteTable", "glue:GetTable" ], "Resource": [ "arn:aws:glue:<endpoint_region_code>:<account_id>:catalog", "arn:aws:glue:<endpoint_region_code>:<account_id>:database/aws_dms_s3_validation_*", "arn:aws:glue:<endpoint_region_code>:<account_id>:table/aws_dms_s3_validation_*/*", "arn:aws:glue:<endpoint_region_code>:<account_id>:userDefinedFunction/aws_dms_s3_validation_*/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::<bucket_name>", "arn:aws:s3:::<bucket_name>/*" ] } ] }

使用 S3 目标验证的限制

查看使用 S3 目标验证时适用的以下其他限制。有关适用于所有验证的限制,请参阅限制

  • 您的 DatePartitionSequence 值需要一个 Day 组件。S3 目标验证不支持 YYYYMM 格式。

  • 在 CDC 期间运行间隔验证时,您可能会在 awsdms_validation_failures_v1 表中看到虚假的验证错误。之所以出现这些错误,是因为 Amazon DMS 会将在间隔验证期间收到的更改迁移到第二天的分区文件夹中。通常,这些更改会写入当天的分区文件夹。这些虚假错误限制了对从动态源数据库复制到静态目标(例如 Amazon S3)的验证。要调查这些虚假错误,请检查验证时段 (00:00 UTC) 快要结束时的记录,错误通常出现在这些时候。

    要尽可能减少虚假错误的数量,请确保任务的 CDCLatencySource 较低。有监控延迟的信息,请参阅复制任务指标

  • 处于 failedstopped 状态的任务不验证前一天的更改。要最大限度地减少由于意外失败而导致的验证错误,请使用相同的表映射以及源端点和目标端点,创建单独的仅验证任务。有关仅验证任务的更多信息,请参阅通过 S3 目标验证使用仅验证任务

  • 表统计数据中的验证状态列反映了最近一次间隔验证的状态。因此,存在不匹配的表可能会在第二天的间隔验证后显示为已验证。检查目标 Amazon S3 存储桶中的 s3_validation_failures folder 是否存超过一天之前发生的不匹配情况。

  • S3 验证使用 Amazon Athena 的存储桶表功能。这允许 S3 验证创建目标表数据的存储桶副本。这意味着表数据的副本被分成与 DMS 验证的内部分区相匹配的子集。Athena 存储桶牌桌的存储桶上限为 100,000 个。S3 验证尝试验证的任何超过此限制的表都将无法通过验证。S3 验证尝试创建的存储桶数量等于以下值:

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

    要解决此限制,请增加验证分区大小设置,使 S3 验证创建的存储桶数量小于 100,000。有关存储桶的更多信息,请参阅 Amazon Athena 用户指南中的 Athena 中的分区和存储桶。

通过 S3 目标验证使用仅验证任务

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

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

在 Amazon S3 目标端点上使用仅验证任务有以下限制:

  • 启用了仅验证设置的 Amazon S3 完全加载任务验证是受支持的,但操作方式与其他端点的完全加载和仅验证任务不同。对于作为目标的 S3,此类任务仅针对 S3 目标中的完全加载数据进行验证,不会针对作为 CDC 迁移的一部分迁移的任何数据进行验证。仅使用此功能来验证由仅完全加载任务创建的数据。使用此模式,对于正在运行 CDC 任务的目标,对其中的数据进行验证不会得到有效的验证。

  • 仅验证任务仅验证自上次间隔验证窗口 (00:00 UTC) 以来的更改。仅验证任务不会验证前一天的完全加载数据或 CDC 数据。