亚马逊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,设置执行任务的角色等配置后,点击确定。推荐规则的任务就开始运行了。任务运行的过程中,也可以查看任务的运行状态
- 关于数据质量规则 DQDL(Data Quality Definition Lanaguage)
数据质量定义语言(DQDL)是一种特定领域的语言,AWS Glue Data Quality 用此语言来定义数据质量的规则。
例如,需要对某一个字段的完整性进行评估,可以按如下语法来定义:
创建静态数据的数据质量评估任务
- 在 Glue 控制台,选择 Data Catalog,选择需要进行数据质量扫描的表,点击进入 Data quality 页面,在页面的最下方,点击 Create data quality rules,打开创建数据质量规则页面,点击 Insert rule recommendations,就可以选择在上一步骤中生成的一些推荐的质量规则。插入在
Rules=[]
中间,点击 Save ruleset。这样我们就创建了一个可用于执行的质量评估规则。 - 选中创建好的规则,点击 Run,开始执行数据质量评估任务。
- 待状态变为完成,可以查看数据质量的评估报告。可以看到数据质量的评分、状态以及详细的结果。
在 ETL 数据管道中配置数据质量评估任务
我们可以在 Glue 的 ETL 作业中嵌入数据质量评估的算子。
- 这样就可以在 ETL 作业中添加一个数据质量评估算子。
- 数据质量评估算子,有两个输出选择,数据质量算子的下游也必须通过这两个输出作为输入:
- 1. Original data:将原始数据输输出
- 2. Data quality results:将质量评估的结果输出
输出的数据集可以 Spark DataFrame 的形式关联到任何一个转换算子或者数据输出的目标算子中。可以针对经过数据质量检测规则算子之后生成的结果,做其他的数据转换和处理。
- 在数据质量评估算子中,可以完成字段评估规则的设置。可以直接复制之前通过静态数据已经生成的数据质量规则,也可以在这里选择其他的质量评估规则,例如:AggregateMatch 可以用于检查两个列的聚合度量值是否匹配;ColumnDataType 可以用于检查字段的类型是否符合要求;也可以使用 CustomSQL 执行自定的 SQL 来检查数据质量。
- 可以将评估的结果发布到 Amazon CloudWatch,利用 CloudWatch 进行告警通知。
- 发现质量不符合规则时,可以有三种处理方式:
数据质量告警
数据质量评估任务发现的数据质量问题,会摄入到 CloudWatch,可以在 CloudWatch 通过 glue.data.quality.rules.passed
(表示已通过的规则数量)和 glue.data.quality.rules.failed
(表示失败规则的数量)来观察数据质量的情况。
数据质量评估的指标有两个维度:
创建告警
- 在 CloudWatch 页面,进入 All alarms 菜单,选择 Create Alarm。
- 点击 Select metric,找到 Glue Data Quality,选择需要告警的指标(库表维度/任务维度)。
- 最后,点击 Create Alarm,完成告警的配置。
在 AWS Glue Data Quality 中,除了可以使用 CloudWatch 进行告警通知以外,还可以通过 Amazon EventBridge 进行告警通知。参考链接:https://docs.thinkwithwp.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 计费单元。
参考资料
- https://thinkwithwp.com/blogs/big-data/aws-glue-data-quality-is-generally-available/
- https://thinkwithwp.com/blogs/big-data/getting-started-with-aws-glue-data-quality-from-the-aws-glue-data-catalog/