本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Amazon Glue 数据质量错误进行故障排除
如果您在 Amazon Glue 数据质量中遇到错误,请使用以下解决方案来帮助您找到问题的根源并进行修复。
目录
- 错误:缺少 Amazon Glue 数据质量模块
- 错误: Amazon Lake Formation 权限不足
- 错误:规则集的名称不唯一
- 错误:带有特殊字符的表
- 错误:规则集过大时发生溢出错误
- 错误:整体规则状态为失败
- AnalysisException: 无法验证是否存在默认数据库
- 错误消息:提供的键映射不适用于给定的数据帧
- 用户类中的异常:java.lang。 RuntimeException : 无法获取数据。查看登录 CloudWatch 以获取更多详细信息
- 启动错误:从 S3 下载存储桶时出错
- InvalidInputException (状态:400):无法解析 DataQuality 规则
- 错误:Eventbridge 没有根据我设置的计划触发 Glue DQ 作业
- CustomSQL 错误
- 动态规则
- 用户类中的异常:org.apache.spark.sql。 AnalysisException: org.apache.hadoop.hive.ql.metadata。 HiveException
- UNCLASSIVED_ERROR; IllegalArgumentException: 解析错误:未提供规则或分析器。,输入时没有可行的替代方案
错误:缺少 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
权限,则在验证默认数据库是否存在时,作业将失败。
要解决这个问题,请执行以下操作:
-
在 Lake Formation 中添加默认数据库的
DESCRIBE
权限。 -
在 Lake Formation 中将附加到 Amazon Glue 作业的 IAM 角色配置为数据库创建者。这将自动创建默认数据库,并为该角色授予所需的 Lake Formation 权限。
-
禁用
--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 meansRowCount
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