亚马逊AWS官方博客

基于无服务架构 Glue Data Quality 提升 ETL 流程中的数据质量

介绍

随着数据分析业务的发展,用户对在数据分析时,ETL 流程中的数据质量越来越关注。实际上,在数据 ETL 过程中,除了对数据量和 ETL 效率的要求以外,数据的质量也是数据分析的关键点。是保障数据分析时保证数据价值的重要前提。要保证在数据分析过程中的数据质量,客户希望能通过自动化的方式,以及适合的工具来解决。本文主要介绍如何在 AWS Glue 中实现数据质量评估。

AWS Glue 是一款无服务器数据集成服务,可以让用户轻松发现、准备、移动和集成来自多个来源的数据。可以将 AWS Glue 用于分析、机器学习和应用程序开发。

AWS Glue Data Quality 是 AWS Glue 服务中托管的一款在数据 ETL 过程中,用于监控数据质量的模块。AWS Glue Data Quality 建立在开源 DeeQu 框架之上,提供托管的无服务器体验,可帮助用户评估和监控数据质量。

Glue Data Quality 的主要功能

  • Serverless,无需安装,开箱即用,按实际使用的计算资源计费
  • 快速使用,可以快速开启创建数据质量规则。
  • 自定义数据质量规则,提供 25 个数据质量规则,可以创建适合自己业务场景的规则
  • 数据质量评分,通过数据质量评估后,可获得数据质量评分,通过分数可以得知数据质量的健康状况
  • 发现质量异常的数据,帮助你识别导致数据质量评分下降的数据详细记录。可以轻松的识别异常数据,并且对数据进行隔离或者修复
  • 采用开源的数据质量规则,数据质量规则是构建在开源的 Deequ 之上,允许用户使用开放的语言来编写数据质量规则
  • 数据质量检查,可以对 Glue Data Catalog 中的数据进行质量检查,也可以正对 ETL 管道中的数据进行数据质量检查

Glue 数据质量的关键能力

  • 嵌入 ETL 工作流 — AWS Glue Data Quality 可以融入 Glue 中开发的 ETL 工作流,可以从 AWS Glue 的数据目录访问数据质量模块,允许管理员在在数据目录中设置数据质量规则。还可以通过 Glue Studio(可视化 ETL 工具)、Glue Studio Notebook(基于 Notebook 界面,方便开发人员创建数据集成管道)和交互式会话访问 AWS Glue Data Quality。
  • 即用即付费,性价比高 — AWS Glue Data Quality 根据使用的计算量付费。数据质量评估的任务可以使用 Flex 执行,对于非 SLA 敏感的数据质量检查任务,可以节省 34% 的成本。另外,在 ETL 工作流中嵌入数据质量也可以帮助用户节省成本,例如在数据加载初期,发现数据质量不符合要求时,可以终止 ETL 任务,而无需将计算资源浪费在质量差的数据上。并且,如果将数据质量检车配置在 ETL 数据管道中时,只会产生增量的成本,因为数据大部分已经被读取在内存中了。
  • 构建在开源基础之上 — AWS Glue Data Quality 采用开源的 Deequ 作为数据质量评估的规则。在亚马逊内部,已经使用它来管理超过 60PB 的数据湖的质量。Deequ 经过优化,可以最少的运行次数来进行数据质量的检查,从而提高运行效率。在 AWS Glue Quality 中编写的规则,可以运行在任何以 Deequ 为基础的环境中。

数据质量检查规则

AWS Glue Data Quality 通过分析数据内容来推荐数据质量规则,从而降低工作量,它使用数据质量定义语言(DQDL)来定义数据质量规则,DQDL 是一种特定领域的语言。Glue Data quality 通过计算数据集的统计数据,例如最小值、最大值和相关性来自动推荐数据质量规则,检查数据的新鲜度、准确性和完整性。对比手动进行数据分析和规则识别的工作,从天减少到了小时。并且可以在建议规则基础上来补充自定义的规则。以下是 AWS Glue Data Quality 支持的规则。

规则类型 举例 描述
AggregateMatch "avg(ratings)" "avg(reference.ratings)" >= 0.9 通过比较总的汇总指标来检查两个数据集是否匹配。
ColumnCorrelation "colA" "colB" < 0.5 检查两个列之间的相关性,使用Pearson进行相关性分析检查。
ColumnCount ColumnCount = 10 检查数据集中的列的数量,主要用于检查列是否被删除。
ColumnDataType "col_1" = "Date" 检查列的数据类型是否符合要求。
ColumnExists "colA" 检查列是否存在。
ColumnLength "colA" < 10 检查列字段的长度是否符合要求。
ColumnNamesMatchPattern "[a-z]*" 通过正则表达式判断字段名称是否符合要求
ColumnValues "source_id" matches "[1-9]*" with threshold > 0.1 检查指定列是的值是否符合要求。该规则支持日期、正则表达式、字符串和数值。
Completeness "colA" between 0.1 and 0.25 检查指定列中是否有空值。
CustomSql "select count(*) from primary" between 10 and 200 通过自定义的SQL来检查数据质量。
DataFreshness "col-A" > 30 hours 通过评估当前时间和日期列值之间的差异来检查列中数据的新鲜度。
DatasetMatch "reference" "PrimaryJoinKey1->RefJoinKey1,PrimaryJoinKey2->RefJoinKey2" >= 0.9 通过使用主键/复合键关联的数据集,检查主数据集中记录与参考数据集中的记录相等的百分比。判断两个数据集是否同步
DistinctValuesCount "colA" = 10 检查指定列中不同值的数量
Entropy "colA" < 1 检查指定列中值的熵
IsComplete IsComplete "colA" 检查数据的完整性
IsPrimaryKey IsPrimaryKey "id" 检查字段是否是主键(不为空,并且唯一)
IsUnique IsUnique "colA" 检查列中的所有值是否都是唯一的
Mean Mean "colA" > 2 检查列中所有值的均值(平均值)是否与给定表达式匹配。
ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" = 1.0 检查参考数据集中是否存在主数据集中的数据。
RowCount RowCount > 1000 检查数据集的记录是否满足要求。
RowCountMatch RowCountMatch "reference" >= 0.9 检查主数据集的行数与参考数据集匹配的百分比。
StandardDeviation StandardDeviation "colA" < 1 检查指定列中所有值的标准差。
SchemaMatch SchemaMatch "reference" = 1.0 检查数据集的Schema是否与参考数据集匹配。
Sum Sum "colA" = 100 检查指定列中所有值的总和是否满足要求。
Uniqueness UniqueValueRatio "colA" > 0.5 检查数据集的唯一性是否与阈值匹配。
UniqueValueRatio Uniqueness "colA" > 0.5 检查给定列中唯一值的比例。

使用方法

生成推荐的数据质量规则

通常,我们在做数据质量评估之前,需要为评估的数据集定义数据质量评估规则。对于大量的数据集和数据字段,需要花费非常多的精力来编写数据质量的评估规则。而在 AWS Glue Data Quality 中,可以帮助我们生成推荐的数据质量规则。它可以探查数据集,对数据列中的字段内容进行分析,对字段值进行统计分析,利用值的最小值、最大值和相关性来自动推荐数据质量规则,并且生成数据质量规则。

下面,我们来看一下如何让 Glue Data Quality 帮助我们生成质量规则。

步骤:

  • 准备数据集 yellow_tripdata_2022-01.parquet 上传至 S3 的目录下,并且通过 Glue Crawler,获取数据集的表结构信息
  • 打开 AWS Glue 的控制台,找到 Data Catalog 菜单,选择表,就可以看到 Data quality 的选项
  • 选择 Create data quality rules 后,进入新的页面
  • 点击 Recommend rules,设置执行任务的角色等配置后,点击确定。推荐规则的任务就开始运行了。任务运行的过程中,也可以查看任务的运行状态
  • 任务状态变为 Completed 后,就可以得到推荐的质量规则
  • 关于数据质量规则 DQDL(Data Quality Definition Lanaguage
    数据质量定义语言(DQDL)是一种特定领域的语言,AWS Glue Data Quality 用此语言来定义数据质量的规则。
    例如,需要对某一个字段的完整性进行评估,可以按如下语法来定义:

    Rules = [ 
        IsComplete "order-id"
    ]
    

创建静态数据的数据质量评估任务

  • 在 Glue 控制台,选择 Data Catalog,选择需要进行数据质量扫描的表,点击进入 Data quality 页面,在页面的最下方,点击 Create data quality rules,打开创建数据质量规则页面,点击 Insert rule recommendations,就可以选择在上一步骤中生成的一些推荐的质量规则。插入在 Rules=[]中间,点击 Save ruleset。这样我们就创建了一个可用于执行的质量评估规则。
  • 选中创建好的规则,点击 Run,开始执行数据质量评估任务。
  • 待状态变为完成,可以查看数据质量的评估报告。可以看到数据质量的评分、状态以及详细的结果。

在 ETL 数据管道中配置数据质量评估任务

我们可以在 Glue 的 ETL 作业中嵌入数据质量评估的算子。

  • 进入 ETL Job,打开 Glue Studio,创建一个 ETL 作业。在创建作业页面,选择 Data quality,再点击 Add data quality transform

     

  • 这样就可以在 ETL 作业中添加一个数据质量评估算子。
  • 数据质量评估算子,有两个输出选择,数据质量算子的下游也必须通过这两个输出作为输入:
    • 1. Original data:将原始数据输输出
    • 2. Data quality results:将质量评估的结果输出

    输出的数据集可以 Spark DataFrame 的形式关联到任何一个转换算子或者数据输出的目标算子中。可以针对经过数据质量检测规则算子之后生成的结果,做其他的数据转换和处理。

  • 在数据质量评估算子中,可以完成字段评估规则的设置。可以直接复制之前通过静态数据已经生成的数据质量规则,也可以在这里选择其他的质量评估规则,例如:AggregateMatch 可以用于检查两个列的聚合度量值是否匹配;ColumnDataType 可以用于检查字段的类型是否符合要求;也可以使用 CustomSQL 执行自定的 SQL 来检查数据质量。
  • 可以将评估的结果发布到 Amazon CloudWatch,利用 CloudWatch 进行告警通知。
  • 发现质量不符合规则时,可以有三种处理方式:
    • 继续执行任务(默认)
    • 将数据继续加载到目标,并且标记任务失败,终止任务
    • 不继续向目标端加载数据,直接标记任务失败并且终止
  • Glue ETL 任务运行完成后,我们可以在 Data quality 中查看数据质量检查的结果。
    这里可以查看数据质量评估的评分,以及有数据质量异常的数据字段,并且可以直接下载数据质量检查的结果。

数据质量告警

数据质量评估任务发现的数据质量问题,会摄入到 CloudWatch,可以在 CloudWatch 通过 glue.data.quality.rules.passed (表示已通过的规则数量)和 glue.data.quality.rules.failed (表示失败规则的数量)来观察数据质量的情况。

数据质量评估的指标有两个维度:

  1. 库表维度:可过滤库名、表名、规则名称来查看数据质量评估指标
  1. 任务维度:可过滤任务名称来查看数据质量评估指标

创建告警

  1. 在 CloudWatch 页面,进入 All alarms 菜单,选择 Create Alarm
  2. 点击 Select metric,找到 Glue Data Quality,选择需要告警的指标(库表维度/任务维度)。
  1. 在 Conditions 中设置需要告警的阈值。
  2. 进入通知配置页面,设置告警通知的类型。可通过 SNS,进行告警推送。
  1. 最后,点击 Create Alarm,完成告警的配置。
    在 AWS Glue Data Quality 中,除了可以使用 CloudWatch 进行告警通知以外,还可以通过 Amazon EventBridge 进行告警通知。参考链接:https://docs.aws.amazon.com/zh_cn/glue/latest/dg/data-quality-alerts.html#data-quality-alerts-eventbridge

总结

通过 AWS Glue Data Quality,可以快速在数据 ETL 流程中配置数据质量评估任务。可以帮助数据工程师在数据管道中添加数据质量评估算子。提高 ETL 过程中的数据质量。并且 AWS Glue Data Quality 采用随用随付费的计费模式和 Glue 一样,使用 DPU 计费单元。

参考资料

本篇作者

黄霄

亚马逊云科技数据分析解决方案架构师,专注于大数据解决方案架构设计,具有多年大数据领域开发和架构设计经验。