亚马逊AWS官方博客

从 AWS Glue 数据目录开始使用 Amazon Glue Data Quality 功能

AWS Glue 是一项无服务器的数据集成服务,可用于轻松发现、准备和合并数据以进行分析、机器学习(ML)和应用程序开发。可以使用 AWS Glue 创建、运行和监控数据集成和 ETL(提取、转换、加载)管道,并跨多个数据存储为资产编制目录。

几十万客户使用数据湖进行分析和机器学习,以便做出数据驱动型业务决策。如果数据不准确且不是最新的,数据使用者就会失去对数据的信任,这样一来,数据质量对于做出最优和正确的决策变得至关重要。

对数据的准确性和新鲜度进行评估是工程师的一项常见任务。目前,提供了多种工具来评估数据质量。不过,这些工具通常需要手动执行数据发现流程,并要求具有数据工程和代码编写方面的专业知识。

我们很高兴地宣布推出 Amazon Glue Data Quality 自动监测功能的公开预览版。现在,您可以在可用区域内访问此功能,而无需请求任何其他访问权限。Amazon Glue Data Quality 自动监测功能是 AWS Glue 的一项新的预览功能,可用于测量和监控基于 Amazon S3 的数据湖和 AWS Glue ETL 作业中的数据质量。此功能不需要任何数据工程或代码编写方面的专业知识,简化了监控和评估数据质量的体验。

这是一个文章系列(共 4 篇文章)的第 1 部分,旨在说明 Amazon Glue Data Quality 自动监测功能的工作原理。查看该系列的后续文章:

Amazon Glue Data Quality 自动监测功能入门

在这篇文章中,我们将通过以下方式展示使用 Amazon Glue Data Quality 自动监测功能的简单性:

  1. 开始提供数据质量建议,然后基于 AWS Glue Data Catalog 中的数据运行。
  2. 创建 Amazon CloudWatch 警报,以便在数据质量结果低于特定阈值时收到通知。
  3. 通过 Amazon Athena 分析 Amazon Glue Data Quality 自动监测功能运行结果。

使用 AWS CloudFormation 设置资源

提供的 CloudFormation 脚本将为您创建以下资源:

  1. 运行 Amazon Glue Data Quality 自动监测功能所需的 IAM 角色
  2. 用于存储 NYC Taxi 数据集的 Amazon Simple Storage Service(Amazon S3)存储桶
  3. 用于存储和分析 Amazon Glue Data Quality 自动监测功能运行结果的 S3 存储桶
  4. 根据 NYC Taxi 数据集创建的 AWS Glue 数据库和表

步骤

  1. 打开 AWS CloudFormation 控制台。
  2. 选择 Create stack(创建堆栈),然后选择 With new resources (standard) [使用新资源(标准)]。
  3. 对于 Template source(模板源),选择 Upload a template File(上传模板文件),并提供上面附加的模板文件。然后选择 Next(下一步)。
  4. 对于 Stack name(堆栈名称)DataQualityDatabaseDataQualityTable,保留为默认值。对于 DataQualityS3BucketName,输入您的 S3 存储桶的名称。然后选择 Next(下一步)。
  5. 在最后一个屏幕上,请务必确认此堆栈将为您创建 IAM 资源,然后选择 Submit(提交)。
  6. 在成功创建堆栈后,导航到堆栈创建的 S3 存储桶并上传 yellow_tripdata_2022-01.parquet 文件。

开始对 AWS Glue Data Catalog 中的数据运行 Amazon Glue Data Quality 自动监测功能

在第一部分中,我们将从 Amazon Glue Data Quality 自动监测功能服务生成数据质量规则建议。之后,我们将根据这些建议对数据集运行数据质量任务来分析数据。

在开始之前,请完成以下步骤:

  1. 打开 AWS Glue 控制台。
  2. Data Catalog(数据目录)下,选择 Tables(表)。
  3. 选择通过 CloudFormation 堆栈创建的 DataQualityTable 表。
  4. 选择 Data quality(数据质量)选项卡。
  5. 选择 Recommend ruleset(建议规则集)。
  6. Recommend data quality rules(建议数据质量规则)页面上,选中 Save recommended rules as a ruleset(将建议规则另存为规则集)。这允许我们自动将建议的规则保存到规则集中,以便在后续步骤中使用。
  7. 对于 IAM Role(IAM 角色),选择从 CloudFormation 堆栈中创建的 IAM 角色。
  8. 对于 Additional configurations -optional(其他配置 – 可选),保留默认工作线程数和超时时间。
  9. 选择 Recommend ruleset(建议规则集)。 这将使用给定数量的工作线程开始数据质量建议运行。
  10. 等待规则集完成。
  11. 完成后,导航回 Rulesets(规则集)选项卡。您应看到建议成功运行并创建了规则集。

了解 Amazon Glue Data Quality 自动监测功能建议

Amazon Glue Data Quality 自动监测功能建议是由 Amazon Glue Data Quality 自动监测功能服务生成的建议,并且依据您的数据形态提供。这些建议将自动考虑数据的行数、均值、标准差等方面,并生成一组规则以供您用作起点。

本文中使用的数据集是 NYC Taxi 数据集。基于这一点、此数据集中的列以及这些列的值,Amazon Glue Data Quality 自动监测功能会建议一组规则。总的来说,建议服务自动考虑了数据集的所有列,并建议了 55 个规则。

其中一些规则是:

  • “RowCount between <> and <> ” → 期望根据它看到的数据获得行数计数
  • “ColumnValues “VendorID” in [ ] → 期望“VendorID”列位于一组特定的值中
  • IsComplete “VendorID” → 期望“VendorID”为非空值

如何使用建议的 Amazon Glue Data Quality 自动监测功能规则?

  1. Rulesets(规则集)部分中,您应看到生成的规则集。选择生成的规则集,然后选择 Evaluate ruleset(评估规则集)。
    • 如果在运行建议时未选中 Save recommended rules as a ruleset(将建议规则另存为规则集)框,仍可单击建议任务运行并复制规则来创建新的规则集
  2. 对于 Data quality properties(数据质量属性)下的 Data quality actions(数据质量操作),选择 Publish metrics to Amazon CloudWatch(将指标发布到 Amazon CloudWatch)。如果未选中此框,则数据质量运行不会将指标发布到 Amazon CloudWatch。
  3. 对于 IAM role(IAM 角色),选择在 AWS CloudFormation 堆栈中创建的 GlueDataQualityBlogRole
  4. 对于 Advanced properties(高级属性)下的 Requested number of workers(请求的工作线程数),保留默认值。
  5. 对于 Data quality results location(数据质量结果位置),选择通过 AWS CloudFormation 堆栈创建的 GlueDataQualityResultsS3Bucket 位置的值。
  6. 选择 Evaluate ruleset(评估规则集)。
  7. 开始运行后,您可以在 Data quality results(数据质量结果)选项卡上查看运行状态。
  8. 在运行过程达到成功阶段后,选择已完成的数据质量任务运行,然后查看 Run results(运行结果)中显示的数据质量结果。

建议服务已建议我们根据列值和我们的 NYC Taxi 数据集中的数据实施 55 个规则。之后,我们将 55 个规则的集合转换为了一个规则集。 我们再使用我们的规则集对数据集运行了数据质量评估任务。在上述结果中,我们可以看到规则集中每个规则的状态。

您还可以利用 Amazon Glue Data Quality 自动监测功能 API 来执行这些步骤。

通过 Amazon CloudWatch 警报获取关于我的数据质量运行失败的 Amazon SNS 通知

每个 Amazon Glue Data Quality 自动监测功能评估都将从 Data Catalog 运行,并且每个数据质量运行均发出一对指标,分别名为 glue.data.quality.rules.passed(表示通过的规则数量)和 glue.data.quality.rules.failed(表示失败的规则的数量)。发出的指标可用于创建警报,以便在给定的数据质量运行低于阈值时提醒用户。

要开始设置通过 Amazon SNS 通知发送电子邮件的警报,请执行以下步骤:

  1. 打开 Amazon CloudWatch 控制台。
  2. 选择 Metrics(指标)下的 All metrics(所有指标)。您将在 Custom namespaces(自定义命名空间)下看到一个名为 Glue Data Quality 的额外命名空间。

注意:在开始 Amazon Glue Data Quality 自动监测功能运行时,请确保已启用 Publish metrics to Amazon CloudWatch(将指标发布到 Amazon CloudWatch)复选框,如下所示。否则,该特定运行的指标将不会发布到 Amazon CloudWatch。

  1. Glue Data Quality 命名空间下,您应能看到按每个表和每个规则集发出的指标。在这篇文章中,如果该值超过 1,我们将使用 glue.data.quality.rules.failed 规则和警报(这表明,当失败的规则评估数大于 1 时,我们希望收到通知)。
  2. 要创建警报,请在 Alarms(警报)下选择 All alarms(所有警报)。
  3. 选择 Create alarm(创建警报)。
  4. 选择 Select metric(选择指标)。
  5. 选择与您创建的表对应的 glue.data.quality.rules.failed 指标,然后选择 Select metric(选择指标)。
  6. Specify metric and conditions(指定指标和条件)选项卡下的 Metrics(指标)部分下:
    1. 对于 Statistic(统计数据),选择 Sum(总计)。
    2. 对于 Period(时段),选择 1 minute(1 分钟)。
  7. Conditions(条件)部分下:
    1. 对于 Threshold type(阈值类型),选择 Static(静态)。
    2. 对于 Whenever glue.data.quality.rules.failed is…(当 glue.data.quality.rules.failed 为…),选择 Greater/Equal(大于/等于)。
    3. 对于 than…(大于…),输入 1 作为阈值。
    4. 展开 Additional configurations(其他配置)下拉列表,并选择 Treat missing data as good(将缺失数据视为良好数据)

这些选择意味着,如果 glue.data.quality.rules.failed 指标发出的值大于或等于 1,我们将触发警报。不过,如果没有数据,我们会将它视为可接受。

  1. 选择 Next(下一步)。
  2. Configure actions(配置操作)上:
    1. 对于 Alarm state trigger(警报状态触发器)部分,选择 In alarm(警报中)。
    2. 对于 Send a notification to the following SNS topic(将通知发送到以下 SNS 主题),选择 Create a new topic(创建新主题)以通过新的 SNS 主题发送通知。
    3. 对于 Email endpoints that will receive the notification…(将接收通知的电子邮件端点…),输入您的电子邮件地址。选择 Next(下一步)。
  3. 对于 Alarm name(警报名称),输入 myFirstDQAlarm,然后选择 Next(下一步)。
  4. 最后,您应在 Preview and create(预览和创建)屏幕上看到所有选择的摘要。选择底部的 Create alarm(创建警报)。
  5. 现在,您应能从 Amazon CloudWatch 警报控制面板中看到正在创建的警报。

为了演示 Amazon Glue Data Quality 自动监测功能警报,我们将探讨一个提取了损坏的数据的真实场景,并探究如何使用我们在前面步骤中创建的警报来通过 Amazon Glue Data Quality 自动监测功能服务获得相关通知。为此,我们将使用提供的 malformed_yellow_taxi.parquet 文件,该文件包含经过专门调整的数据。

  1. 导航到本博客文章的开头提供的 CloudFormation 模板中提到的 S3 位置 DataQualityS3BucketName
  2. malformed_yellow_tripdata.parquet 文件上传到此位置。这将帮助我们模拟一个流程,其中我们通过 ETL 流程将一个数据质量较差的文件引入数据湖。
  3. 导航到 AWS Glue Data Catalog 控制台,选择通过提供的 AWS CloudFormation 模板创建的 demo_nyc_taxi_data_input,然后导航到 Data quality(数据质量)选项卡。
  4. 选择我们在第一部分中创建的规则集。然后选择 Evaluate ruleset(评估规则集)。
  5. Evaluate data quality screen(评估数据质量屏幕)中:
    1. 选中 Publish metrics to Amazon CloudWatch(将指标发布到 Amazon CloudWatch)框。需要选中此复选框以确保向 Amazon CloudWatch 发送失败指标。
    2. 选择通过 AWS CloudFormation 模板创建的 IAM 角色。
    3. (可选)选择一个 S3 位置来发布 Amazon Glue Data Quality 自动监测功能结果。
    4. 选择 Evaluate ruleset(评估规则集)。
  6.  导航到 Data Quality results(数据质量结果)选项卡。现在,您应看到两个运行,一个来自本文章的前几个步骤的运行,另一个我们当前触发的运行。等待当前运行完成。
  7. 如您所见,我们的 Amazon Glue Data Quality 自动监测功能运行结果失败,并且最初 55 个规则中仅 52 个规则通过。这些失败是因我们上传到 S3 的新文件导致的。
  8. 导航到 Amazon CloudWatch 控制台,并选择我们在此部分的开头创建的警报。
  9. 如您所见,我们已将警报配置为当 glue.data.quality.rules.failed 指标超过阈值 1 时触发。在上述 Amazon Glue Data Quality 自动监测功能运行后,我们发现 3 个规则失败,并且触发了警报。此外,您还将收到一封电子邮件,其中详细说明了警报触发情况。

因此,我们演示了一个示例,其中可通过 Amazon Glue Data Quality 自动监测功能规则识别进入数据湖的格式错误的传入数据,并可以创建后续警报机制来通知相应人员。

通过 Amazon Athena 分析 Amazon Glue Data Quality 自动监测功能运行结果

如果一个数据集在一个时段内有多个 Amazon Glue Data Quality 自动监测功能运行结果,您可能需要跟踪该时段内的数据集质量趋势。为此,我们可以将 Amazon Glue Data Quality 自动监测功能运行结果导出到 S3,然后使用 Amazon Athena 对导出的运行实施分析查询。之后,可以在 Amazon QuickSight 中进一步使用这些结果来构建控制面板,以图形化表示数据质量趋势

在这篇文章的第三部分中,我们将看到开始跟踪数据集质量数据所需的步骤:

  1. 对于我们在前面部分中设置的数据质量运行,我们将 Data quality results location(数据质量结果位置)参数设置为 AWS CloudFormation 堆栈所指定的存储桶位置。
  2. 每次成功运行后,您将看到一个 JSONL 文件正导出到与该特定运行对应的所选 S3 位置。
  3. 打开 Amazon Athena 控制台。
  4. 在查询编辑器中,运行以下 CREATE TABLE 语句(将 <my_table_name> 替换为相关值,并将 <GlueDataQualityResultsS3Bucket_from_cfn> 部分替换为提供的 AWS CloudFormation 模板中的 GlueDataQualityResultsS3Bucket 值):
    CREATE EXTERNAL TABLE `<my_table_name>`(
    `catalogid` string,
    `databasename` string,
    `tablename` string,
    `dqrunid` string,
    `evaluationstartedon` timestamp,
    `evaluationcompletedon` timestamp,
    `rule` string,
    `outcome` string,
    `failurereason` string,
    `evaluatedmetrics` string)
    PARTITIONED BY (
    `year` string,
    `month` string,
    `day` string)
    ROW FORMAT SERDE
    'org.openx.data.jsonserde.JsonSerDe'
    WITH SERDEPROPERTIES (
    'paths'='catalogId,databaseName,dqRunId,evaluatedMetrics,evaluationCompletedOn,evaluationStartedOn,failureReason,outcome,rule,tableName')
    STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
    OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
    's3://<GlueDataQualityResultsS3Bucket_from_cfn>/'
    TBLPROPERTIES (
    'classification'='json',
    'compressionType'='none',
    'typeOfData'='file')
    
    MSCK REPAIR TABLE `<my_table_name>`
  5. 创建上面的表后,您将能够运行查询来分析数据质量结果。

例如,在以下查询中,显示了在某个范围内针对 demo_nyc_taxi_data_input 表的失败的 Amazon Glue Data Quality 自动监测功能运行:

SELECT * from "<my_table_name>"
WHERE "outcome" = 'Failed'
AND "tablename" = '<my_source_table>'
AND "evaluationcompletedon" between
parse_datetime('2022-12-05 17:00:00:000', 'yyyy-MM-dd HH:mm:ss:SSS') AND parse_datetime('2022-12-05 20:00:00:000', 'yyyy-MM-dd HH:mm:ss:SSS');

上述查询的输出显示了有关针对 NYC Taxi 数据集表(“tablename” = ‘demo_nyc_taxi_data_input’)的所有 “outcome” = ‘Failed’ 运行的详细信息。此输出还提供了有关失败原因(failurereason)和作为评估依据的值(evaluatedmetrics)的信息。

如您所见,我们能够通过上传到 S3 的运行结果获取有关 Amazon Glue Data Quality 自动监测功能运行的详细信息,执行更详细的分析并基于数据构建控制面板。

清理

  • 导航到 Amazon Athena 控制台,并删除为数据质量分析创建的表。
  • 导航到 Amazon CloudWatch 控制台并删除创建的警报。
  • 如果您部署了示例 CloudFormation 堆栈,请通过 AWS CloudFormation 控制台删除该 CloudFormation 堆栈。您需要先清空 S3 存储桶,然后再删除该存储桶。
  • 如果您已启用 Amazon Glue Data Quality 自动监测功能运行以输出到 S3,请同时清空这些存储桶。

小结

在这篇文章中,我们讨论了使用 Amazon Glue Data Quality 自动监测功能将数据质量规则纳入 AWS Glue Data Catalog 表的简易性和速度。我们还讨论了如何根据表运行建议和评估数据质量。之后,我们讨论了如何通过 Amazon Athena 分析数据质量结果,以及通过 Amazon CloudWatch 设置警报以告知用户数据质量失败的流程。

要深入了解 Amazon Glue Data Quality 自动监测功能 API,请查看 Amazon Glue Data Quality 自动监测功能 API 文档
要了解有关 Amazon Glue Data Quality 自动监测功能的更多信息,请查看 Amazon Glue Data Quality 自动监测功能开发人员指南


关于作者

Aniket Jiddigoudar 是 AWS Glue 团队的大数据架构师。

Joseph Barlan 是 AWS Glue 的前端工程师。他在帮助团队构建可重用的 UI 组件方面拥有 5 年以上的经验,并且热衷于前端设计系统。在业余时间,他喜欢画铅笔画,并且对电视非常入迷。