在 AWS Glue Studio 中評估 ETL 任務的資料品質 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 AWS Glue Studio 中評估 ETL 任務的資料品質

在本教學課程中,您可開始使用 AWS Glue Studio 中的 AWS Glue Data Quality。您將學到如何:

  • 使用資料品質定義語言 (DQDL) 規則建置器建立規則。

  • 指定資料品質動作、要輸出的資料,以及資料品質結果的輸出位置。

  • 檢閱資料品質結果。

若要練習使用範例,請檢閱部落格文章 ETL 管道的 AWS Glue Data Quality 入門

步驟 1:將「評估資料品質」轉換節點新增至視覺化任務

在此步驟中,您要將評估資料品質節點新增到視覺化任務編輯器。

新增資料品質節點
  1. 在 AWS Glue Studio 主控台中,從建立任務區段中選擇具有來源和目標的視覺化,然後選擇建立

  2. 選擇您要套用資料品質轉換的節點。一般而言,這將是轉換節點或資料來源。

  3. 透過選擇 "+" 圖示開啟左側的資源面板。然後在搜尋列中輸入評估資料品質,接著從搜尋結果中選擇評估資料品質

  4. 視覺化任務編輯器將顯示從您選取的節點分支的評估資料品質轉換節點。在主控台右側,轉換索引標籤將自動開啟。如果需要變更父節點,請選擇節點屬性索引標籤,然後從下拉式選單中選擇父節點。

    選擇新的父節點時,會在父節點與評估資料品質節點之間建立新的連線。移除任何不需要的父節點。只有一個父節點可以連接到一個評估資料品質節點。

  5. 「評估資料品質」轉換支援多個父項,因此您可以驗證多個資料集的資料品質規則。支援多個資料集的規則包括 ReferentialIntegrity、DatasetMatch、SchemaMatch、RowCountMatch 和 AggregateMatch。

    當您將多個輸入新增至「評估資料品質」轉換時,您需要選取「主要」輸入。您的主要輸入是您想要驗證資料品質的資料集。所有其他節點或輸入都被視為參考。

    您可以使用「評估資料品質」轉換來識別未通過資料品質檢查的特定記錄。建議您選擇主資料集,因為標示錯誤記錄的新資料欄會新增至主資料集。

  6. 您可以為輸入資料來源指定別名。當您使用 ReferentialIntegrity 規則時,別名會提供另一種參考輸入來源的方式。因為只能將一個資料來源指定為主要來源,您新增的每個其他資料來源都需要別名。

    在下列範例中,ReferentialIntegrity 規則會依別名指定輸入資料來源,並與主要資料來源執行一對一的比較。

    Rules = [ ReferentialIntegrity “Aliasname.name” = 1 ]

步驟 2:使用 DQDL 建立規則

在此步驟中,您要使用 DQDL 建立規則。在本教學課程中,您將使用完整度規則類型建立單一規則。此規則類型會根據指定運算式檢查資料欄中完整 (非 Null) 值的百分比。如需有關使用 DQDL 的詳細資訊,請參閱 DQDL

  1. 轉換索引標籤中,選擇插入按鈕以新增規則類型。這會將規則類型新增至規則編輯器,您可以在其中輸入規則的參數。

    注意

    編輯規則時,請確保規則位於括號內,且以逗號分隔規則。例如,完整的規則運算式如下所示:

    Rules= [ Completeness "year">0.8, Completeness "month">0.8 ]

    此範例指定名為 'year' 和 'month' 資料欄的完整度參數。這些資料欄必須大於 80%「完整」,或各相應資料欄中 80% 以上的執行個體都有資料,才能通過規則。

    在此範例中,搜尋並插入完整度規則類型。這會將規則類型新增至規則編輯器。此規則類型的語法如下:Completeness <COL_NAME> <EXPRESSION>

    大多數規則類型都需要您提供運算式作為參數,以建立布林值回應。如需有關支援的 DQDL 運算式的詳細資訊,請參閱 DQDL 運算式。接著新增資料欄名稱。

  2. 在 DQDL 規則建置器中,按一下結構描述索引標籤。使用搜尋列尋找輸入結構描述中的欄名稱。輸入結構描述會顯示欄名稱和資料類型。

  3. 在規則編輯器中按一下規則類型右側,將游標插入要插入資料欄的位置。或者,您也可以在規則中輸入資料欄的名稱。

    例如,在輸入結構描述清單中的資料欄清單中,選擇資料欄 (在此範例中為) 旁的插入按鈕。這會將資料欄新增至規則。

  4. 然後,在規則編輯器中新增運算式來評估規則。由於完整度規則類型會根據指定運算式檢查欄中完整 (非 Null) 值的百分比,請輸入運算式,例如 > 0.8。此規則將檢查資料欄是否大於 80% 的完整 (非 Null) 值。

步驟 3:設定資料品質輸出

建立資料品質規則後,即可選取其他選項以指定資料品質節點輸出:

  1. 資料品質轉換輸出中,從以下選項中選擇:

    • 原始資料:選擇輸出原始輸入資料。當您選擇此選項時,任務中會新增一個新的子節點 “rowLevelOutcomes”。其結構描述與作為輸入傳遞至轉換的主資料集結構描述相符。如果您只想在品質問題發生時傳遞資料並讓任務失敗,則此選項非常有用。

      另一個使用案例是當您想要偵測未通過資料品質檢查的錯誤記錄時。若要偵測錯誤記錄,請選擇新增資料欄以指出資料品質錯誤選項。此動作會將四個新資料欄新增至 “rowLevelOutcomes” 轉換的結構描述。

      • DataQualityRulesPass (字串陣列):提供通過資料品質檢查的規則陣列。

      • DataQualityRulesFail (字串陣列):提供未通過資料品質檢查的規則陣列。

      • DataQualityRulesSkip (字串陣列):提供已略過的規則陣列。下列規則無法識別錯誤記錄,因為它們是在資料集層級套用。

        • AggregateMatch

        • ColumnCount

        • ColumnExists

        • ColumnNamesMatchPattern

        • CustomSql

        • RowCount

        • RowCountMatch

        • StandardDeviation

        • Mean

        • ColumnCorrelation

      • DataQualityEvaluationResult:在資料列層級提供「已通過」或 「未通過」狀態。請注意,您的整體結果可能是未通過,但某個記錄可能會通過。例如,RowCount 規則可能已失敗,但所有其他規則可能已成功。在這種情況下,此欄位狀態為「已通過」。

  2. 資料品質結果:選擇輸出已設定的規則及其通過或失敗狀態。如果您想要將結果寫入 Amazon S3 或其他資料庫,此選項非常有用。

  3. 資料品質輸出設定 (選用):選擇資料品質輸出設定,以顯示資料品質結果位置欄位。然後選擇瀏覽,以搜尋要設定為資料品質輸出目標的 Amazon S3 位置。

步驟 4. 設定資料品質動作

動作可讓您根據特定條件將指標發布至 CloudWatch 或停止任務。動作只有在您建立規則之後才可用。當您選擇此選項時,相同的指標也會發布至 Amazon EventBridge。您可以使用這些選項建立通知警示

  • 規則集失敗時:如果規則集在任務執行時失敗,您可以選擇該怎麼做。如果您希望任務在資料品質失敗時失敗,請選取下列其中一個選項來選擇任務失敗的時間。預設不會選取此動作,即使資料品質規則失敗,任務也會完成執行。

    • :如果選擇 (預設值),即使規則集失敗,任務也不會失敗,而會繼續執行。

    • 將資料載入目標後任務失敗:任務失敗且不儲存任何資料。若要儲存結果,請選擇要儲存資料品質結果的 Amazon S3 位置。

    • 任務失敗而不載入至目標資料:發生資料品質錯誤時,此選項會立即讓任務失敗。它不會載入任何資料目標,包括資料品質轉換的結果。

步驟 5:檢視資料品質結果

執行任務後,選擇資料品質索引標籤來檢視資料品質結果。

  1. 檢視每個任務執行的資料品質結果。每個節點都會顯示資料品質狀態和狀態詳細資訊。選擇節點以檢視所有規則和每個規則的狀態。

  2. 選擇下載結果以下載 CSV 檔案,其中包含有關任務執行和資料品質結果的資訊。

  3. 如果您執行多個具有資料品質結果的任務,則可以依日期和時間範圍篩選結果。選擇依日期和時間範圍篩選以展開篩選條件視窗。

  4. 選擇相對範圍或絕對範圍。如要使用絕對範圍,請使用行事曆選取日期,並輸入開始時間和結束時間的值。完成時,請選擇套用

自動資料品質

當您以 AWS Amazon S3 做為目標建立 Glue ETL 任務時, AWS Glue ETL 會自動啟用 Data Quality 規則,以檢查要載入的資料是否至少有一個資料欄。此規則旨在確保載入的資料不會空白或損毀。不過,如果此規則失敗,任務將不會失敗;反之,您會注意到資料品質分數降低。此外,異常偵測預設為啟用,可監控資料中的資料欄數。如果資料欄計數中有任何變化或異常, AWS Glue ETL 會通知您這些異常。此功能可協助您識別資料的潛在問題,並採取適當的動作。若要檢視 Data Quality 規則及其組態,您可以在 Glue ETL 任務中按一下 Amazon S3 AWS 目標。將會顯示規則的組態,如提供的螢幕擷取畫面所示。

螢幕擷取畫面顯示可供選取的自動資料品質選項。

您可以選取編輯資料品質組態來新增其他資料品質規則。

彙總指標

您可能需要彙總指標,例如在規則層級或規則集層級傳遞、失敗、略過的記錄數,才能建置儀表板。若要取得每個規則的彙總指標和規則指標,請先將 publishAggregatedMetrics選項新增至EvaluateDataQuality函數,以啟用彙總指標。

的可能選項additional_optionspublishAggregatedMetricsENABLEDDISABLED。舉例來說:

EvaluateDataQualityMultiframe = EvaluateDataQuality().process_rows( frame=medicare_dyf, ruleset=EvaluateDataQuality_ruleset, publishing_options={ "dataQualityEvaluationContext": "EvaluateDataQualityMultiframe", "enableDataQualityCloudWatchMetrics": False, "enableDataQualityResultsPublishing": False, }, additional_options={"publishAggregatedMetrics.status": "ENABLED"}, )

如果未指定,publishAggregatedMetrics.statusDISABLED預設為 ,現在將計算 ruleMetrics 和彙總指標。Glue AWS 互動式工作階段和 Glue ETL 任務目前支援此功能。Glue Catalog Data Quality APIs 不支援此功能。

擷取彙總指標結果

additionalOptions"publishAggregatedMetrics.status": "ENABLED",您可以在兩個位置取得結果:

  1. AggregatedMetrics 提供 和 GetDataQualityResult()時, resultIdAggregatedMetricsRuleMetrics 會透過 傳回RuleMetrics,其中包含:

    彙總指標:

    • 處理的資料列總數

    • 傳遞的資料列總數

    • 失敗的資料列總數

    • 已處理的規則總數

    • 傳遞的規則總數

    • 失敗的規則總數

    螢幕擷取畫面顯示 Glue Data Quality AWS 評估的彙總指標和規則指標結構。

    此外,在規則層級,會提供下列指標:

    規則指標:

    • 傳遞的資料列

    • 資料列失敗

    • 已略過的資料列

    • 已處理的資料列總數

  2. AggregatedMetrics 會以額外的資料影格傳回,並擴增RuleOutcomes資料影格以包含 RuleMetrics

實作範例

下列範例示範如何在 Scala 中實作彙總指標:

// Script generated for node Evaluate Data Quality val EvaluateDataQuality_node1741974822533_ruleset = """ # Example rules: Completeness "colA" between 0.4 and 0.8, ColumnCount > 10 Rules = [ IsUnique "customer_identifier", RowCount > 10, Completeness "customer_identifier" > 0.5 ] """ val EvaluateDataQuality_node1741974822533 = EvaluateDataQuality.processRows(frame=ChangeSchema_node1742850392012, ruleset=EvaluateDataQuality_node1741974822533_ruleset, publishingOptions=JsonOptions("""{"dataQualityEvaluationContext": "EvaluateDataQuality_node1741974822533", "enableDataQualityCloudWatchMetrics": "true", "enableDataQualityResultsPublishing": "true"}"""), additionalOptions=JsonOptions("""{"compositeRuleEvaluation.method":"ROW","observations.scope":"ALL","performanceTuning.caching":"CACHE_NOTHING", "publishAggregatedMetrics.status": "ENABLED"}""")) println("--------------------------------ROW LEVEL OUTCOMES--------------------------------") val rowLevelOutcomes_node = EvaluateDataQuality_node1741974822533("rowLevelOutcomes") rowLevelOutcomes_node.show(10) println("--------------------------------RULE LEVEL OUTCOMES--------------------------------") val ruleOutcomes_node = EvaluateDataQuality_node1741974822533("ruleOutcomes") ruleOutcomes_node.show() println("--------------------------------AGGREGATED METRICS--------------------------------") val aggregatedMetrics_node = EvaluateDataQuality_node1741974822533("aggregatedMetrics") aggregatedMetrics_node.show()

範例結果

結果會傳回,如下所示:

{ "Rule": "IsUnique \"customer_identifier\"", "Outcome": "Passed", "FailureReason": null, "EvaluatedMetrics": { "Column.customer_identifier.Uniqueness": 1 }, "EvaluatedRule": "IsUnique \"customer_identifier\"", "PassedCount": 10, "FailedCount": 0, "SkippedCount": 0, "TotalCount": 10 } { "Rule": "RowCount > 10", "Outcome": "Failed", "FailureReason": "Value: 10 does not meet the constraint requirement!", "EvaluatedMetrics": { "Dataset.*.RowCount": 10 }, "EvaluatedRule": "RowCount > 10", "PassedCount": 0, "FailedCount": 0, "SkippedCount": 10, "TotalCount": 10 } { "Rule": "Completeness \"customer_identifier\" > 0.5", "Outcome": "Passed", "FailureReason": null, "EvaluatedMetrics": { "Column.customer_identifier.Completeness": 1 }, "EvaluatedRule": "Completeness \"customer_identifier\" > 0.5", "PassedCount": 10, "FailedCount": 0, "SkippedCount": 0, "TotalCount": 10 }

彙總指標如下所示:

{ "TotalRowsProcessed": 10, "PassedRows": 10, "FailedRows": 0, "TotalRulesProcessed": 3, "RulesPassed": 2, "RulesFailed": 1 }