案例中心

介绍 AWS Glue 数据质量异常检测 大数据博客

2026-01-27 12:27:52



AWS Glue Data Quality异常检测功能介绍

关键要点

随着商业环境的变化,固定的数据质量标准可能会导致数据质量下降。AWS Glue Data Quality现在提供异常检测功能,能够根据季节性和数据的增长趋势进行实时监测。本文提供了如何设置AWS Glue Data Quality异常检测的详细步骤,以及如何通过云端组件实现数据质量监控。

随着许多组织建立数据集成流水线以提取及转化数据,它们会设定数据质量规则,以确保提取的数据具有高质量,从而进行准确的商业决策。这些规则通常基于反映当前商业状态的固定标准。然而,当商业环境发生变化时,数据属性也会改变,这会使这些固定标准过时,导致数据质量的下降。

例如,一位零售公司的数据工程师设定了一条规则,验证每日销售额必须超过100万美元。几个月后,日销售额超过了200万美元,这使得该阈值不再适用。由于缺乏通知以及手动更新规则所需的努力,数据工程师无法更新这条规则。最终,本月晚些时候,业务用户发现销售额下降了25。经过数小时的调查,数据工程师发现一个负责从某些商店提取数据的ETL管道在未产生错误的情况下失败了。而这条旧阈值规则仍在正常运作,没有检测到这个异常。

此外,与季节模式显著偏离的中断或缺口,也可能指向数据质量问题。例如,零售销售在周末和节假日通常最高,而在工作日则相对较低。与这一模式的偏离,可能显示诸如商店缺失数据或商业环境变化等数据质量问题。而固定标准的数据质量规则无法检测季节性模式,因为这需要先进的算法来学习过去的模式并捕捉季节性变化,以检测偏离。我们需要具备轻松发现异常的能力,以便主动检测数据质量问题,并做出自信的商业决策。

为了解决这些挑战,我们很高兴宣布AWS Glue Data Quality新增异常检测功能的普遍可用性。在本文中,我们将通过示例展示此功能的工作原理,并提供AWS CloudFormation模板以便部署和实验。

鲸鱼加速器苹果版

为方便导航,您可以探索以下所有与AWS Glue Data Quality相关的博客文章,这将帮助您了解AWS Glue Data Quality的其他能力,除了异常检测之外的诸多功能。

第一部分:从AWS Glue数据目录开始使用AWS Glue Data Quality第二部分:开始使用AWS Glue Data Quality进行ETL管道第三部分:使用AWS Glue Data Quality在多个数据集上设置数据质量规则第四部分:使用AWS Glue Data Quality设置警报并协调数据质量规则第五部分:可视化AWS Glue Data Quality生成的数据质量分数和指标第六部分:测量AWS Glue Data Quality在ETL管道中的性能第七部分:使用AWS Glue Data Quality动态规则为ETL管道入门第八部分:介绍AWS Glue Data Quality异常检测

解决方案概述

在这个示例中,一位数据工程师想要测量和监控纽约出租车乘车数据集的数据质量。数据工程师了解一些规则,但希望监控关键列,并在这些列中出现任何异常时获得通知。这些列包括费用金额,并且数据工程师希望对于重大偏差能够有相应的通知。另一个属性是乘车数量,在高峰时段、中午和晚上时段会有所变化。同时,随着城市的发展,整体乘车数量也会逐渐增加。我们使用异常检测来帮助建立和维护季节性和增长趋势的规则。

我们将通过以下步骤展示此功能:

部署一个CloudFormation模板,该模板将生成7天的纽约出租车数据。创建一个AWS Glue ETL任务,并配置异常检测功能。运行此任务6天,观察AWS Glue Data Quality如何从数据统计中学习并检测异常。

使用AWS CloudFormation设置资源

这篇文章中包含了一个CloudFormation模板以快速设置。您可以审查并自定义它以适应您的需求。该模板生成以下资源:

资源描述亚马逊S3存储桶(anomalydetectionbloglt账户IDgtlt区域gt)AWS身份与访问管理IAM策略与S3存储桶关联的策略anomalydetectionbloglt账户IDgtlt区域gtIAM角色包含AWS Glue运行权限以及S3存储桶的读写权限的角色anomalydetectionblogGlueServiceRoleAWS Glue数据库用于目录中保存数据的数据库anomalydetectionblogdbAWS Glue可视化ETL作业用于生成示例数据的作业anomalydetectionblogdatageneratorjob

要创建资源,请完成以下步骤:

在useast1启动您的CloudFormation堆栈。

保持所有设置为默认值。

选择我确认AWS CloudFormation可能创建IAM资源并选择创建堆栈。堆栈完成后,将AWS Glue脚本复制到S3存储桶 anomalydetectionbloglt账户IDgtlt区域gt。打开 AWS CloudShell。

运行以下命令 根据需要替换账户ID和区域:

bashaws s3 cp s3//awsblogsartifactspublic/BDB4485/scripts/anomalydetectionblogdatageneratorjobpy s3//anomalydetectionbloglt账户IDgtlt区域gt/scripts/anomalydetectionblogdatageneratorjobpy

介绍 AWS Glue 数据质量异常检测 大数据博客

运行数据生成器作业

作为CloudFormation模板的一部分,数据生成器AWS Glue作业将在您的AWS账户中预配置。完成以下步骤以运行作业:

在AWS Glue控制台中,选择导航窗格中的ETL作业。选择该作业。查看脚本上的脚本。在作业详情选项卡中,验证高级部分中的作业运行参数:bucketname 您希望生成数据的S3存储桶名称。bucketprefix S3存储桶中的前缀。gluecatalogdatabasename CloudFormation模板创建的AWS Glue数据目录中的数据库名称。gluecatalogtablename 将在数据库中创建的数据目录表名称。选择运行以运行此作业。在运行选项卡上监控作业,直到运行状态列显示为成功。

当作业完成时,它将在指定的S3存储桶中生成2024年5月1日至7日的纽约出租车数据集,并在数据目录中对年、月、日、时进行目录化。此数据集包含了七天的乘车数量,乘车数量在高峰和低谷之间交替变化。例如,周一大约有1400次乘车,周二大约700次,这一模式持续5天。在这7天中,前5天的数据没有异常。然而,第六天发生异常,行数跃升至约2200,fareamount 设置为高达95的异常值。

创建AWS Glue可视化ETL作业

完成以下步骤:

在AWS Glue控制台,创建一个名为anomalydetectionblogvisual的新AWS Glue可视化作业。在作业详情选项卡上,提供CloudFormation堆栈创建的IAM角色。在可视化选项卡上,添加一个S3节点作为数据源。提供以下参数: 对于数据库,选择anomalydetectionblogdb。对于表,选择nyctaxiraw。对于分区谓词,输入year==2024 AND month==5 AND day==1。

添加“评估数据质量”转换并为fareamount使用以下规则:

pythonRules = [ ColumnValues fareamount between 1 and 100]

因为我们仍在尝试了解该指标的统计数据,所以我们从宽范围规则开始,几次运行后再分析结果并进行必要的微调。

接下来,我们添加两个分析器:一个用于行数,另一个用于pulocationid的不同值。

在异常检测选项卡中,选择添加分析器。

对于统计,输入RowCount。

添加第二个分析器。

对于统计,输入DistinctValuesCount并对于列输入pulocationid。

您的最终规则集应如下所示:

pythonRules = [ ColumnValues fareamount between 1 and 100]Analyzers = [ DistinctValuesCount pulocationid RowCount]

保存作业。

我们现在已经生成了一个合成的纽约出租车数据集,并编写了一个AWS Glue可视化ETL作业,以读取该数据集并使用一条规则和两个分析器进行分析。

运行并评估可视化ETL作业

在我们运行作业之前,让我们看看异常检测是如何工作的。在此示例中,我们配置了一条规则和两个分析器。规则有阈值用于比较什么是正常的。有时,您可能知道关键列,但不知道具体的阈值。规则和分析器收集数据统计或数据特征。在此示例中,AWS Glue Data Quality将收集四个统计数据ColumnValue规则将收集两个统计数据,即最小值和最大值,两个分析器将收集两个统计数据。在从三次运行中收集三个数据点后,AWS Glue Data Quality将预测第四次运行及其上下限。然后它将比较预测值与实际值。当实际值突破预测上下限时,它将引发异常。

让我们看看实际运行情况。

运行作业5天并分析结果

由于头5天的数据没有异常,它将设置一个带有季节性的基线以训练模型。完成以下步骤以运行作业五次,每次处理一天的分区:

在可视化选项卡中选择S3节点并转到其属性。在分区谓词中将天字段设置为1。选择运行以运行此作业。在运行选项卡中监视作业,直到显示结果为成功。重复以上步骤四次,每次递增天字段的分区谓词。您可以在相对规律的时间间隔内运行作业,以获得干净的图表,并模拟自动化的调度管道。

在五次成功运行后,转到数据质量选项卡,您应能看到为fareamount和RowCount收集的统计值。

异常检测算法至少需要三个数据点才能学习并开始预测。在三次运行后,您可能会在数据集中看到多个检测到的异常。这是预期的,因为每个新趋势最初都被视为异常。随着算法处理越来越多的记录,它会从中学习,并准确地设定数据的上下限。这些上下限预测依赖于作业运行之间的间隔。

我们还可以观察到,基于我们设置的通用fareamount规则,数据质量分数始终为100。您可以通过选择每个指标的查看趋势链接深入了解数据的值。例如,以下屏幕截图展示了一组运行中的fareamount的最小值。

模型已经预测出fareamount度量的最小统计值,上限大约为14,下限大约为12。当这些范围被突破时,将视为异常。

运行第六天异常并分析结果

对于第六天,我们处理一份包含两个已知异常的文件。在此运行中,您应该会在图表上看到异常被检测到。完成以下步骤:

在可视化选项卡中选择S3节点并转到其属性。将分区谓词中的day字段设置为6。选择运行以运行此作业。在运行选项卡中监控作业,直到显示结果为成功。

您应该会看到下面的屏幕截图,其中检测到两个异常,这是预期之中的:一个是fareamount,其值为95,另一个为RowCount,其值为2776。

请注意,尽管fareamount的得分异常且较高,但数据质量分数仍然为100。我们稍后将对此进行修正。

让我们进一步调查RowCount异常。如以下屏幕截图所示,如果您展开异常记录,您可以看到预测的上限被突破,从而导致了这个异常。

到目前为止,我们看到了如何为模型训练设定基线并收集统计数据。我们还看到数据集中异常值是如何被模型标记为异常的。

根据发现更新数据质量规则

现在我们理解了统计数据,让我们调整规则集,以便当规则失败时,数据质量分数受到影响。我们从异常检测功能中获取规则建议,并将其添加到规则集中。

如前所述,当检测到异常时,右侧图表会给出规则建议。在这种情况下,该建议指出RowCount的度量应在275019660之间。让我们更新我们的可视化作业。

复制规则建议中RowCount的规则。在可视化选项卡上,选择“评估数据质量”节点,转到其属性,并在规则编辑器中输入