对 Amazon Glue 数据质量错误进行故障排除 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对 Amazon Glue 数据质量错误进行故障排除

如果您在 Amazon Glue 数据质量中遇到错误,请使用以下解决方案来帮助您找到问题的根源并进行修复。

错误:缺少 Amazon Glue 数据质量模块

错误消息:没有名为“awsgluedq”的模块。

解决方法:当你在不支持的版本中运行 Amazon Glue Data Quality 时,就会发生此错误。 Amazon 仅有 Glue 版本 3.0 及更高版本支持 Glue 数据质量。

错误: Amazon Lake Formation 权限不足

错误消息:用户类异常:impact_sdg_complation 上的 Lake Formation 权限不足(服务com.amazonaws.services.glue.model.AccessDeniedException:Amazon Glue;状态码:400;错误代码:;请求编号:465ae693-b7ba-4df0-a4e4-6b17xxxxxxxx AccessDeniedException;代理:空)。

解决方案:您必须在 Amazon Lake Formation 中提供足够的权限。

错误:规则集的名称不唯一

错误消息:用户类中存在异常:... services.glue.model。 AlreadyExistsException:另一个同名的规则集已经存在。

解决方法:规则集是全局的并且必须是唯一的。

错误:带有特殊字符的表

错误消息:用户类中存在异常:org.apache.spark.sql。 AnalysisException: 无法解析 “C” 给定输入列:[primary.data_end_time、primary.data_start_time、primary.end_time、primary.data_start_time、primary.end_time、primary.end_time、primary.end_time、primary.end_time、primary.last_utime、primary.last_utime、primary.last_

解决方法:目前存在一个限制,即无法在带有特殊字符(例如 “.”)的表上执行 Amazon Glue Data Quality。

错误:规则集过大时发生溢出错误

错误消息:用户类中存在异常:java.lang。 StackOverflowError。

解决方法:如果您的大型规则集大于 2K 规则,则可能会遇到此问题。将您的规则分解为多个规则集。

错误:整体规则状态为失败

错误条件:我的规则集已成功,但我的整体规则状态为失败。

解决方案:之所以出现此错误,很可能是因为您在发布 CloudWatch 时选择了向 Amazon 发布指标的选项。如果您的数据集位于 VPC 中,则您的 VPC 可能不允 Amazon 许 Glue 向亚马逊发布指标 CloudWatch。在这种情况下,您>必须为您的 VPC 设置终端节点才能访问亚马逊 CloudWatch。

AnalysisException: 无法验证是否存在默认数据库

错误条件:: 无法验证默认数据库是否存在 AnalysisException:com.amazonaws.services.glue.model。 AccessDeniedException: 默认情况下 Lake Formation 权限不足(服务:Amazon Glue;状态码:400;错误代码: AccessDeniedException;请求编号:XXXXXXX-XXXX-XXXX-XXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX-XXXXXXX-XXXXXXX-XXX

解决方法:在 Amazon Glue 作业的目录集成中,Amazon Glue 始终尝试使用 Amazon Glue GetDatabase API 检查默认数据库是否存在。如果未授予 DESCRIBE Lake Formation 权限或授予了 GetDatabase IAM 权限,则在验证默认数据库是否存在时,作业将失败。

要解决这个问题,请执行以下操作:

  1. 在 Lake Formation 中添加默认数据库的 DESCRIBE 权限。

  2. 在 Lake Formation 中将附加到 Amazon Glue 作业的 IAM 角色配置为数据库创建者。这将自动创建默认数据库,并为该角色授予所需的 Lake Formation 权限。

  3. 禁用 --enable-data-catalog 选项。(它在 Amazon Glue Studio 中显示为使用 Data Catalog 作为 Hive 元存储)。

    如果作业中不需要 Spark SQL Data Catalog 集成,可以禁用。

错误消息:提供的键映射不适用于给定的数据帧

错误条件:提供的键映射不适用于给定的数据帧。

解决方案:您使用的是DataSetMatch规则类型,并且联接键有重复项。您的交集键必须唯一,并且不能为 NULL。如果您无法使用唯一的联接键,请考虑使用其他规则类型,例如AggregateMatch匹配摘要数据。

用户类中的异常:java.lang。 RuntimeException : 无法获取数据。查看登录 CloudWatch 以获取更多详细信息

错误条件:用户类异常:java.lang。 RuntimeException : 无法获取数据。查看登录 CloudWatch 以获取更多详细信息。

解决方案:当您在基于 Amazon S3 的表上创建 DQ 规则并与 Amazon RDS 或进行比较时,就会发生这种情况。 Amazon Redshift在这些情况下,Amazon Glue 无法加载连接。相反,请尝试在 Amazon Redshift 或 Amazon RDS 数据集上设置 DQ 规则。这是一个已知错误。

启动错误:从 S3 下载存储桶时出错

错误条件:启动错误:从 S3 下载存储桶时出错:aws-glue-ml-data-quality-assets-us-east-1, key: jars/aws-glue-ml-data-quality-etl.jar.Access Denied (Service: Amazon S3; Status Code: 403; Please refer logs for details)

解决方案:传递给 Amazon Glue Data Quality 的角色权限必须允许从之前的 Amazon S3 位置进行读取。此 IAM policy 应附加到该角色:

{ "Sid": "allowS3", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::aws-glue-ml-data-quality-assets-<region>/*" }

有关详细权限,请参阅 Data Quality authorization。这些库是评估数据集的数据质量所必需的。

InvalidInputException (状态:400):无法解析 DataQuality 规则

错误条件: InvalidInputException (状态:400):无法解析 DataQuality 规则。

解决方法:出现此错误的可能性很多。一种可能性是您的规则可能使用单引号。确认其已用双引号括起来。例如:

Rules = [ ColumnValues "tipo_vinculo" in ["CODO", "DOCO", "COCO", "DODO"] AND "categoria" = 'ES" AND "cod_bandera" = 'CEP'

将其更改为:

Rules = [ (ColumnValues "tipovinculo" in [ "CODO", "DOCO", "COCO", "DODO"]) AND (ColumnValues "categoria" = "ES") AND (ColumnValues "codbandera" = "CEP") ]

错误:Eventbridge 没有根据我设置的计划触发 Glue DQ 作业

错误条件:Eventbridge 没有根据我设置的计划触发 Amazon Glue Data Quality 作业。

解决方法:触发作业的角色可能没有正确的权限。确保您用于启动作业的角色具有计划评估运行所需的 IAM 设置中提及的权限。

CustomSQL 错误

错误条件 The output from CustomSQL must contain at least one column that matches the input dataset for Amazon Glue Data Quality to provide row level results. The SQL query is a valid query but no columns from the SQL result are present in the Input Dataset. Ensure that matching columns are returned from the SQL

解决方法:SQL 查询有效,但请确认仅从主表中选择列。从主函数中选择聚合函数(例如 sum、count 列)可能会导致此错误。

错误条件 There was a problem when executing your SQL statement: cannot resolve "Col"

解决方法:主表中不存在此列。

错误条件 The columns that are returned from the SQL statement should only belong to the primary table. "In this case, some columns ( Col ) belong to reference table"

解决方法:在 SQL 查询中,当您将主表与其他引用表联接时,确认您的 select 语句仅包含主表中的列名,以便为主表生成行级结果。

动态规则

错误条件: Dynamic rules require job context, and cannot be evaluated in interactive session or data preview.

原因:当规则集中存在动态 DQ 规则时,此错误消息可能会出现在您的数据预览结果,或其他交互式会话中。动态规则引用与特定作业名称和评估上下文相关的历史指标,因此无法在交互式会话中对其进行评估。

解决方法:运行 Amazon Glue 作业将生成历史指标,可在以后的作业运行中为相同的作业引用这些指标。

错误条件

  • [RuleType] rule only supports simple atomic operands in thresholds..

  • Function last not yet implemented for [RuleType] rule.

解决方法:数字表达式中的所有 DQDL 规则类型通常都支持动态规则(请参阅 DQDL 参考)。但是,尚不支持某些生成多个指标 ColumnValues 和 ColumnLength的规则。

错误条件 Binary expression operands must resolve to a single number.

原因:动态规则支持二进制表达式,如 RowCount > avg(last(5)) * 0.9。此处二进制表达式为 avg(last(5)) * 0.9。此规则有效,因为两个操作数 avg(last(5))0.9 均解析为一个数字。RowCount > last(5) * 0.9 是一个错误示例,因为 last(5) 会生成一个无法与当前行数进行有意义比较的列表。

解决方法:使用聚合函数将列表值操作数缩减为单个数字。

错误条件

  • Rule threshold results in list, and a single value is expected. Use aggregation functions to produce a single value. Valid example: sum(last(10)), avg(last(10)).

  • Rule threshold results in empty list, and a single value is expected.

原因:动态规则可用于将数据集的某些特征,与其历史值进行比较。如果提供了正整数参数,则最后一个函数可以检索多个历史值。例如,last(5) 将检索您的规则在作业运行时观测到的最近五个值。

解决方法:必须使用聚合函数将这些值缩减为单个数字,才能与当前作业运行时观测到的值进行有意义的比较。

有效示例:

  • RowCount >= avg(last(5))

  • RowCount > last(1)

  • RowCount < last()

无效示例:RowCount > last(5)

错误条件

  • Function index used in threshold requires positive integer argument.

  • Index argument must be an integer. Valid syntax example: RowCount > index(last(10, 2)), which means RowCount must be greater than third most recent execution from last 10 job runs.

解决方法:在编写动态规则时,您可以使用 index 聚合函数从列表中选择一个历史值。例如 RowCount > index(last(5),1) 将检查在当前作业中观测到的行数,是否严格大于在作业中观测到的次新行数。index 从零开始编制索引。

错误条件 IllegalArgumentException: Parsing Error: Rule Type: DetectAnomalies is not valid

解决方法:异常检测仅在 Amazon Glue 4.0 中提供。

错误条件 IllegalArgumentException: Parsing Error: Unexpected condition for rule of type ... no viable alternative at input ...

注意:... 是动态的。示例:IllegalArgumentException: Parsing Error: Unexpected condition for rule of type RowCount with number return type, line 4:19 no viable alternative at input '>last'

解决方法:异常检测仅在 Amazon Glue 4.0 中提供。

用户类中的异常:org.apache.spark.sql。 AnalysisException: org.apache.hadoop.hive.ql.metadata。 HiveException

错误条件: Exception in User Class: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table mailpiece_submitted. StorageDescriptor#InputFormat cannot be null for table: mailpiece_submitted (Service: null; Status Code: 0; Error Code: null; Request ID: null; Proxy: null)

原因:你在 Glue 数据目录中使用 Apache Iceberg,而 Amazon Gl Amazon ue 数据目录中的 “输入格式” 属性为空。

解决方法:当您在 DQ 规则中使用 CustomSQL 规则类型时,会出现此问题。解决这个问题的一种方法是使用“主要”或将目录名称 glue_catalog. 添加到 <database>.<table> in Custom ruletype

UNCLASSIVED_ERROR; IllegalArgumentException: 解析错误:未提供规则或分析器。,输入时没有可行的替代方案

错误条件: UNCLASSIFIED_ERROR; IllegalArgumentException: Parsing Error: No rules or analyzers provided., no viable alternative at input

解决方案:DQDL 不可解析。在某些情况下,可能会发生这种情况。如果您使用的是复合规则,请确保它们有右括号。

(RowCount >= avg(last(10)) * 0.6) and (RowCount <= avg(last(10)) * 1.4) instead of RowCount >= avg(last(10)) * 0.6 and RowCount <= avg(last(10)) * 1.4