本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如果您在 AWS Glue 資料品質中遇到錯誤,請使用下列解決方案來協助您找出問題的根源並加以修正。
內容
- 錯誤:缺少 AWS Glue 資料品質模組
- 錯誤: AWS Lake Formation 權限不足
- 錯誤:規則集的命名不是唯一的
- 錯誤:資料表具有特殊字元
- 錯誤:大型規則集的溢位錯誤
- 錯誤:整體規則狀態為失敗
- AnalysisException: 無法驗證預設資料庫是否存在
- 錯誤訊息:提供的索引鍵映射不適合指定的資料框架
- 使用者類別中的例外狀況:java.lang。 RuntimeException :無法擷取資料。檢查登錄 CloudWatch 以獲取更多詳細信息
- 啟動錯誤:從 S3 下載儲存貯體時發生錯誤
- InvalidInputException (狀態:400):無法剖析 DataQuality 規則
- 錯誤:Eventbridge 不會根據我設定的排程觸發 Glue DQ 任務
- CustomSQL 錯誤
- 動態規則
- 使用者類別中的例外狀況:或。 AnalysisException:組織 .hadoop.hive.ql. 元數據。 HiveException
- 未分類 _ERROR; IllegalArgumentException:解析錯誤:沒有提供規則或分析器。,輸入時沒有可行的替代方法
錯誤:缺少 AWS Glue 資料品質模組
錯誤訊息:沒有名為 'awsgluedq' 的模組。
解決方法:在不支援的版本中執行 AWS Glue 資料品質時,就會發生此錯誤。 AWS 只有 Glue 3.0 版及更新版本才支援「Glue 資料品質」。
錯誤: AWS Lake Formation 權限不足
錯誤訊息:使用者類別中的例外狀況:com.amazonaws.services.glue.model.AccessDeniedException
: 影響 _sdg_參與時的 Lake Formation 權限不足 (服務:AWS Glue;狀態碼:400;錯誤代碼:;請求識別碼:465ae693-b7ba-4df0-a4e4-6b17xxxxxx AccessDeniedException;代理伺服器:空值)。
解決方案:您必須在 AWS Lake Formation 中提供足夠的權限。
錯誤:規則集的命名不是唯一的
錯誤消息:用戶類中的異常:... 服務 .glue.model。 AlreadyExistsException:另一個具有相同名稱的規則集已存在。
解決方案:規則集是全域的並且必須是唯一的。
錯誤:資料表具有特殊字元
錯誤訊息:使用者類別中的例外狀況:或 .apache.spark.sql。 AnalysisException: 無法解析「C」給定的輸入列:[主要的 .data_end_time,主要的 .data_start_time,主要的 .end_time,主要的. 最後更新,主要的. 處理日期,主要的 .rowhash,主要的 .run_id,主要的 .start_time,主要的 .status]; 第 1 行。
解決方案:目前有一項限制,即無法在具有特殊字元 (例如「.」) 的表格上執行「 AWS Glue 資料品質」。
錯誤:大型規則集的溢位錯誤
錯誤消息:用戶類中的異常:java.lang。 StackOverflowError。
解決方案:如果是大於 2K 規則的大型規則集,則可能會遇到此問題。將規則分解為多個規則集。
錯誤:整體規則狀態為失敗
錯誤條件:我的規則集成功,但我的整體規則狀態失敗。
解決方案:最有可能發生此錯誤,是因為您選擇了在發佈 CloudWatch 時將指標發佈到 Amazon 的選項。如果您的資料集位於 VPC 中,則您的 VPC 可能不允許 AWS Glue 將指標發佈到 Amazon。 CloudWatch在這種情況下,您必須為您的 VPC 設置一個端點才能訪問 Amazon。 CloudWatch
AnalysisException: 無法驗證預設資料庫是否存在
錯誤條件: AnalysisException: 無法驗證預設資料庫是否存在:. AccessDeniedException: 預設情況下的 Lake Formation 權限不足 (服務:AWS Glue;狀態碼:400;錯誤代碼:;請求識別碼:XXXXXX-XXXX-XXXX-XXXXXX AccessDeniedException;代理伺服器:空值)
解決方案:在 AWS Glue 任務的型錄整合中,AWS Glue 一律會嘗試檢查預設資料庫是否存在或不使用 AWS Glue GetDatabase API
。如果未授予 DESCRIBE
Lake Formation 許可或已授予 GetDatabase IAM
許可,則在驗證預設資料庫的存在時,該任務會失敗。
若要解決問題:
-
在 Lake Formation 中新增預設資料庫的
DESCRIBE
許可。 -
將附加至 AWS Glue 任務的 IAM 角色設定為 Lake Formation 中的資料庫建立者。這會自動建立預設資料庫,並授予角色所需的 Lake Formation 許可。
-
停用
--enable-data-catalog
選項。(在 AWS Glue Studio 中顯示為使用 Data Catalog 作為 Hive 中繼存放區)。如果不需要任務中的 Spark SQL Data Catalog 整合,則可以停用此功能。
錯誤訊息:提供的索引鍵映射不適合指定的資料框架
錯誤條件:提供的索引鍵映射不適合指定的資料框架。
解決方案:您正在使用DataSetMatch規則類型,並且連接鍵具有重複項。聯結索引鍵必須是唯一的,且不得為 NULL。如果您無法擁有唯一的聯結索引鍵,請考慮使用其他規則類型,例如AggregateMatch比對摘要資料。
使用者類別中的例外狀況:java.lang。 RuntimeException :無法擷取資料。檢查登錄 CloudWatch 以獲取更多詳細信息
錯誤條件:用戶類中的異常:java.lang。 RuntimeException :無法擷取資料。檢查登錄 CloudWatch 以獲取更多詳細信息。
解決方案:當您在與 Amazon RDS 或比較的 Amazon S3 表格上建立 DQ 規則時,就會發生這種情況。 Amazon Redshift在這些情況下,AWS 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)
。
解決方案:傳遞給 AWS Glue 資料品質之角色的許可必須允許從之前的 Amazon S3 位置讀取。此 IAM 政策應附加至該角色:
{
"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 不會根據我設定的排程觸發 AWS Glue Data Quality 任務。
解決方案:觸發任務的角色可能沒有正確的許可。請確定您用來開始作業的角色具有排程評估執行所需的 IAM 設定中提到的許可。
CustomSQL 錯誤
錯誤條件: The output from CustomSQL must contain at least one column that matches the
input dataset for AWS 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 這樣的彙總函數,對主資料表中的資料欄進行計數可能會導致此錯誤。
錯誤條件: 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 規則時,此錯誤訊息可能會出現在資料預覽結果或其他互動式工作階段中。動態規則會參考與特定作業名稱和評估內容相關聯的歷史指標,因此無法在互動式工作階段中評估這些指標。
解決方案:執行 AWS 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
。
解決方案:異常偵測功能僅適用於 AWS 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'
。
解決方案:異常偵測功能僅適用於 AWS Glue 4.0。
使用者類別中的例外狀況:或。 AnalysisException:組織 .hadoop.hive.ql. 元數據。 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,而 AWS Glue 資料型錄中 AWS 的輸入格式屬性為空。
解決方案:當您在 DQ 規則中使用 CustomSQL 規則類型時,就會發生此問題。解決此問題的一種方法是使用「主要」或將目錄名稱添加glue_catalog.
到<database>.<table>
in Custom ruletype
.
未分類 _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