使用 AWS Glue 执行大规模数据一致性检查以支持数据现代化
重点摘要
随着企业将本地数据仓库和数据湖迁移到 AWS 云,保证数据迁移质量变得尤为重要。数据一致性检测确保了将数据从源平台迁移到目标平台时保持数据的完整性和准确性。本文将介绍如何利用 AWS Glue Data Quality 自动化数据一致性检查,从而高效支持数据现代化项目。
今天,越来越多的客户开始实施数据现代化项目,通过将本地的数据仓库和数据湖迁移到 AWS 云,借助云端的规模化与先进的分析能力,完成数字化转型。客户们通常会将基于 Netezza、PostgreSQL、Greenplum 和 Teradata 等数据库构建的本地数据仓库迁移到基于 AWS 的现代数据平台,并使用 Amazon S3 和 Amazon Redshift 等服务。
在迁移过程中,建立本地数据库与 AWS 数据平台服务之间的数据一致性检查至关重要。数据一致性是一个验证过程,确认数据在从源到目标迁移过程中未出现错误或失败。成功的数据一致性检查意味着目标平台的数据在内容、值和完整性方面与源平台的数据相当。
数据一致性能够增强业务用户对迁移数据质量的信心,同时帮助识别新云基础的提取、转换和加载ETL过程中的错误。部分客户会构建自定义的内部数据一致性框架来验证迁移过程中的数据,而另一些客户则选择使用开源数据质量工具。这些解决方案往往需要大量的自定义代码、配置和安装,且面临可扩展性挑战,因此会分散很多原本应该投向实际迁移的精力。
本文将展示如何利用 AWS Glue Data Quality,作为 AWS Glue 的一项功能,在数据现代化和迁移项目中建立数据一致性检查,且配置和基础设施设置最小化。AWS Glue Data Quality 可让您自动测量和监控存储库中的数据质量以及 AWS Glue ETL 管道的质量。
解决方案概述
在从本地数据库迁移到基于 Amazon S3 的数据湖的大型数据现代化项目中,通常会有以下数据一致性需求:
比较源本地数据库的一次性历史数据与目标 S3 数据湖的数据。比较从源本地数据库持续复制到目标 S3 数据湖的数据。比较云基础的新 ETL 过程的结果与现有本地 ETL 过程的结果。您可以计划一段时间的并行运行,即旧系统和新系统同步运行,并每日比较数据。使用功能查询比较源本地数据库与目标数据湖之间的业务高层聚合指标。在本文中,我们通过将 PostgreSQL 数据库从本地迁移到 S3 数据湖的示例,使用 AWS Glue Data Quality 来展示以上需求的实现。
以下图示说明了本用例中的历史数据迁移架构。
架构展示了从本地数据库如 PostgreSQL迁移到基于 Amazon S3 的数据湖的常见模式。工作流程包括以下步骤:
将模式和表存储在本地 PostgreSQL 数据库中,要迁移到 AWS Glue 进行计算和 Amazon S3 存储。使用 AWS 数据库迁移服务AWS DMS将历史数据从源数据库迁移到 S3 暂存桶。使用 AWS Glue ETL 从 S3 暂存桶整理数据至 S3 规范桶。在规范桶中,AWS Glue 表通过 AWS Glue 爬虫 或 AWS Glue ETL 作业创建。使用 AWS Glue 连接 将 AWS Glue 连接到本地 PostgreSQL 数据库。使用 AWS Glue Data Quality 比较源数据库的历史数据与目标 S3 桶的数据,并将结果写入另一个 S3 桶。以下图示展示了增量数据迁移架构。
历史数据迁移和验证完成后,工作流将进入以下步骤:
从源系统向 S3 暂存桶引入增量数据。可以使用 ETL 进程工具如 AWS Glue。使用 AWS Glue ETL 将增量数据从 S3 暂存桶整理到 S3 规范桶。使用 AWS Glue Data Quality 比较增量数据。接下来的部分,我们展示如何使用 AWS Glue Data Quality 在源PostgreSQL和目标Amazon S3之间建立数据一致性检查。我们涵盖以下场景:
建立历史数据迁移的一致性 历史数据迁移被定义为一次性从旧的本地数据库迁移历史数据到 AWS 云的批量数据迁移,数据一致性确保迁移后的历史数据有效性。建立增量数据的一致性 在历史数据迁移后,增量数据将使用新的云基础 ETL 过程加载到 Amazon S3。增量数据在旧的本地数据库和 AWS 云间进行比较。使用功能查询建立数据一致性 我们会使用 SQL 查询在迁移的数据上执行业务和功能层面的检查。准备工作
您需要设置以下前置资源:
一个 PostgreSQL 数据库,可以在本地或使用 Amazon RDS关系数据库服务 的 PostgreSQL 数据库实例。PostgreSQL 中有一个模式和表,并包含示例数据。一个 AWS 账户,已经设置了 Amazon VPC 和基础网络。一个与 PostgreSQL 数据库连接的 VPC。原始数据层和整理数据层的 S3 桶。拥有访问 S3 数据桶权限的 AWS Identity and Access ManagementIAM角色。设置了 AWS DMS 从 PostgreSQL 数据库向 Amazon S3 和 AWS Glue 数据目录 复制历史数据。建立历史数据迁移的一致性
在进行历史数据迁移和一致性检查时,假设已经完成了 PostgreSQL 数据库的设置、使用 AWS DMS 将数据迁移到 Amazon S3 以及数据整理的工作,接下来可以使用 AWS Glue Data Quality 进行数据一致性检查。为了此用例,我们使用一个本地 PostgreSQL 数据库,历史数据已加载到 Amazon S3 和 AWS Glue 中。我们的目标是比较本地数据库与 AWS 云之间的历史数据。
我们将在本地 PostgreSQL 数据库中使用以下表格,这些数据已通过 AWS DMS 迁移到 AWS 云。数据整理时,我们在 testschemasampledata 表中增加了三列:id、etlcreatets 和 etluserid。
创建 sampledata 表,使用以下代码:sql create table testschemasampledata ( job text company text ssn text residence text currentlocation text website text username text name text genderid integer bloodgroupid integer address text mail text birthdate date insertts timestamp with time zone updatets timestamp with time zone )
创建 gender 表,包含性别详情以供查找:sql create table testschemagender ( genderid integer value varchar(1) )
创建 bloodgroup 表,包含血型信息以供查找:sql create table testschemabloodgroup ( bloodgroupid integer value varchar(10) )
假设上述表格已通过 AWS DMS 迁移至 S3 暂存桶,并进行了 AWS Glue 数据整理。要了解如何设置 AWS DMS 进行数据复制,请参考本文末尾的附录。
接下来的部分,我们展示如何配置 AWS Glue Data Quality 作业进行比较。
创建 AWS Glue 连接
AWS Glue Data Quality 需要通过 AWS Glue 连接来连接到源 PostgreSQL 数据库。请按照以下步骤创建连接:
在 AWS Glue 控制台中,导航到 Data Catalog 下的 Connections。选择 Create connection。设置 Connector type 为 JDBC。添加连接细节,如连接 URL、凭证和网络信息。有关更多细节,请参考 AWS Glue 连接属性。
AWS Glue 40 使用 PostgreSQL JDBC 驱动程序 4236。如果您的 PostgreSQL 数据库需要不同版本的 JDBC 驱动程序,请访问 下载 JDBC 驱动程序。
创建用于历史数据比较的 AWS Glue 数据一致性作业
作为之前步骤的一部分,您使用 AWS DMS 将历史数据从 PostgreSQL 拉取到 S3 暂存桶。然后使用 AWS Glue 笔记本将数据从暂存桶整理到规范桶,并创建了 AWS Glue 表。接下来,您将使用 AWS Glue Data Quality 比较 PostgreSQL 与 Amazon S3 之间的数据,以确认数据的有效性。请执行以下步骤创建 AWS Glue 作业,使用 AWS Glue 可视化编辑器比较 PostgreSQL 与 Amazon S3 之间的数据:
设置源为 PostgreSQL 表 sampledata。设置目标为 AWS Glue 表 sampledata。
在整理层中,我们增加了几列:id、etlcreatets 和 etluserid。因为这些列是新创建的,所以我们需要一个转换步骤将其从比较中剔除。
此外,将 birthdate 列在 AWS Glue 中是时间戳格式,所以在比较之前需要将其转换为日期格式。
在 Transformations 中选择 Evaluate Data Quality。
指定 AWS Glue Data Quality 规则为 DatasetMatch,该规则检查主数据集中数据是否与参考数据集中的数据匹配。提供源和目标的唯一键主键信息。在此示例中,主键是 job 和 username 列的组合。

对于 Data quality transform output,指定输出数据:
Original data 包含原始数据的所有行和列。此外,您可以选择 Add new columns to indicate data quality errors 选项,此选项会为每一行添加元数据列,以识别有效与无效行以及未通过验证的规则。您可以进一步自定义行级输出,选择仅保留有效行或根据用例转换表格格式。Data quality results 这是根据规则汇总的摘要输出。对于我们数据一致性的示例,此输出将有一行总结匹配百分比。
配置 Amazon S3 目标以便于将 ruleOutcomes 和 rowLevelOutcomes 的结果以 Parquet 格式写入 Amazon S3。
保存并运行 AWS Glue 作业。
当 AWS Glue 作业完成时,您可以运行 AWS Glue 爬虫来自动创建 rulesummary 和 rowleveloutput 表,并在 Amazon Athena 中查看输出。以下是规则级输出的示例。截图显示 DatasetMatch 值为 10,意味着源 PostgreSQL 数据库和目标数据湖之间的所有行都匹配。
以下是行级输出的示例。截图显示所有源行以及额外列,确认一行是否通过或未通过验证。
快橙加速器ios企业版让我们更新 PostgreSQL 中的一些记录,以模拟数据迁移过程中的数据问题:
sqlupdate testschemasampledata set residence = null where bloodgroupid = 8
执行完此更新后,重新运行 AWS Glue 作业并在 Athena 中查看输出。以下截图显示新的匹配百分比为 8727。通过这个例子,您能够成功捕捉到 AWS Glue Data Quality 模拟的数据问题。
如果您执行以下查询,输出将与之前截图中的记录计数匹配:
sqlSELECT count() FROM gluedqblogrowleveloutput where dataqualityevaluationresult=Failed
建立增量数据的一致性
在初始历史迁移后,下一步是在旧的本地数据库与 AWS 云之间实施验证增量数据的过程。对于增量数据验证,现有 ETL 过程的输出和新的云基础 ETL 过程的输出将进行每日比较。您可以在前面的 AWS Glue 数据一致性作业中添加过滤器,选择按时戳列选择某一天修改过的数据。
使用功能查询建立数据一致性
功能查询是业务分析师可以在旧系统在本示例中为本地数据库和新的 AWS 云基础数据湖中运行的 SQL 语句,以比较数据指标和输出。确保消费应用程序能够正常运行在迁移数据上,这一点至关重要,因此必须对功能上进行验证。在前面的示例中,主要是技术验证,确保在从历史迁移和变更数据捕获CDC上下文中数据摄取后,目标数据湖中没有数据丢失。
功能数据一致性是总体数据验证框架的第三步,在此步骤中,您可以利用聚合 SQL 查询驱动类似的业务指标验证。您可以构建自己的业务指标验证查询,最好与业务侧的主题专家SMEs一起工作。我们发现灵活性和完美性对成功的数据仓库迁移至关重要,因此重用经过验证的并经过业务主题专家批准的聚合 SQL 查询,并进行最小更改,可以加快实施速度并增强业务信心。在这一部分,我们演示如何实现给定数据集的示例功能一致性。
在本示例中,我们使用一组源 PostgreSQL 表和目标 S3 数据湖表进行比较。我们使用 AWS Glue 爬虫为源表创建数据目录表,如前面的示例所述。
示例功能验证比较每个公司的性别和血液类型的分布计数。这可以是任何连接事实和维度表并进行聚合的功能查询。
您可以使用 SQL 转换生成源查询和目标查询的聚合数据集。在本示例中,源查询使用多个表。在列上应用 SQL 函数及必要的过滤条件。
以下截图展示了源功能查询的转换。
以下截图展示了目标功能查询的转换。
以下截图展示了评估数据质量的转换。您可以应用 DatasetMatch 规则以实现 100 匹配。
运行作业后,您可以在 AWS Glue 控制台中找到作业运行状态。
数据质量 标签显示数据质量结果。
AWS Glue Data Quality 提供行级和规则级输出,如之前的示例所描述。
检查 Athena 表中的规则级输出,DatasetMatch 规则的结果显示 PostgreSQL 源数据集与目标数据湖之间100匹配。
检查 Athena 表中的行级输出,以下截图展示了带有数据质量评估结果和规则状态的行级输出。
让我们将 Spencer LLC 的公司值更改为 Spencer LLC New,以模拟对数据质量规则和整体结果的影响。这将导致在比较源和目标数据集时,给定公司名称的记录计数出现差异。
通过重新运行作业并检查 AWS Glue Data Quality 结果,您将发现数据质量规则已失败。这是因为源和目标数据集之间的公司名称差异导致,因为数据质量规则评估追踪的是100匹配。您可以根据所需的阈值降低数据质量表达式中的匹配百分比。
接下来,请还原之前为模拟数据质量规则失败而做的更改。
如果您重新运行作业并验证 AWS Glue Data Quality 结果,您将发现数据质量得分已恢复至 100。
清理
如果您不再希望在 AWS 账户中保留本文创建的资源,可以完成以下步骤:
删除 AWS Glue 笔记本和可视化 ETL 作业。清除所有数据并删除暂存和整理 S3 桶。删除与 PostgreSQL 数据库的 AWS Glue 连接。删除 AWS DMS 复制任务和实例。删除数据目录。结论
在本文中,我们讨论了如何使用 AWS Glue Data Quality 来建立一个可扩展的数据一致性管道,以支持数据现代化项目。AWS Glue Data Quality 通过自动化数据质量监控和管理中的许多手动任务,使数据的质量得以维持。这有助于防止错误数据进入您的数据湖和数据仓库。本文的示例提供了如何使用 AWS Glue Data Quality 设置历史、增量和功能数据一致性作业的概述。
要了解更多关于 AWS Glue Data Quality 的信息,请参考 使用 AWS Glue Studio 评估数据质量 和 AWS Glue 数据质量。若要深入了解 AWS Glue Data Quality API,请查看 [数据
利用 AWS 加强电信安全 安全博客
利用AWS提升电信安全作者:Kal Krishnan Danny Cortegaca 和 Ruben Merz,于2025年2月7日在最佳实践、中级200、安全、身份与合规、思想领袖发布。关键要点在与...
构建符合 OCPP 标准的电动车充电点运营商解决方案,使用 AWS IoT Core 官方博客
利用AWS提升电信安全作者:Kal Krishnan Danny Cortegaca 和 Ruben Merz,于2025年2月7日在最佳实践、中级200、安全、身份与合规、思想领袖发布。关键要点在与...