本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EMR Data Quality
採用 AWS Glue Data Quality 技術的 Amazon EMR Data Quality 可讓您測量和監控 Amazon EMR Spark 工作負載讀取和寫入的資料品質,而無需離開 Spark 應用程式。Amazon EMR Data Quality 使用與 Glue Data Quality 相同的開放原始碼 Deequemr-spark-8.1.0) 的 AWS 執行期開始,您可以將EvaluateDataQuality轉換新增至 Spark 指令碼,直接在 Amazon EMR Spark 應用程式中評估資料品質。轉換會針對 DataFrame 執行宣告規則集,並傳回處理中的每個規則結果,讓您的應用程式可以根據結果採取行動 (例如,規則失敗時中止下游寫入)。每個評估也會發佈到 AWS Glue Data Quality,因此您可以檢閱執行的歷史記錄,並對它們發出提醒,以及來自 AWS Glue ETL 和 AWS Glue Data Catalog 的執行。
使用 Amazon EMR Data Quality 需要以資料品質定義語言 (DQDL) 撰寫的 Spark 應用程式和規則集。除了現有的 Spark 工作流程之外,不需要其他程式設計。
Amazon EMR Data Quality 適用於所有三種 Amazon EMR 部署模式:Amazon EMR on EC2、Amazon EMR on EKS 和 Amazon EMR Serverless。它僅支援 Apache Spark。
Data Quality 的運作方式
Amazon EMR Data Quality 是 Spark 轉換。您可以傳遞 DataFrame 和 DQDL 規則集;它會評估規則並傳回結果的 DataFrame。每個評估也會發佈至 AWS Glue Data Quality,以便您稍後可以透過 APIs 或 Glue AWS 主控台查詢結果。 AWS Glue ETL 和 AWS Glue Data Catalog 會發佈至相同的存放區,因此您可以將 Amazon EMR 執行與來自這些引擎的執行進行比較。
您可以將資料品質期望定義為以資料品質定義語言 (DQDL) 參考撰寫的宣告式規則集。規則集是一組描述資料集預期屬性的規則。例如,下列規則集會檢查資料表是否具有超過 100 個資料列、其customer_id資料欄是否完整且唯一,以及資料country欄是否從一組固定值中繪製。
Rules = [ RowCount > 100, IsComplete "customer_id", IsUnique "customer_id", ColumnValues "country" in ["US", "CA", "MX"] ]
在執行時間,EvaluateDataQuality轉換會讀取 DataFrame、使用 Glue Data Quality AWS 和 AWS Glue Data Catalog 所使用的相同 Deequ 引擎評估每個規則,並傳回每個規則的結果 (Failed、 Passed或 Error)。失敗的規則包含觀察值,因此您可以對其進行分類,而無需重新執行應用程式。結果是您的應用程式可以分支、記錄或保留的 Spark DataFrame。
Data Quality 也會將每個評估發佈至 Glue Data Quality AWS 服務。從那裡,您可以:
-
使用 AWS Glue Data Quality APIs (
GetDataQualityResultV2、ListDataQualityResultsV2、BatchGetDataQualityResultV2) AWS CLI、 或 Glue AWS 主控台查詢歷史結果。 -
在應用程式設定 AWS 時,在驗證的 Glue Data Catalog 資料表下的 AWS Glue 主控台中檢視執行
publishToDataCatalogTarget。執行會出現在指定資料庫和資料表的資料品質索引標籤上,以及以相同資料表為目標的 AWS Glue ETL 執行。 -
啟用每次執行所產生的統計資料時間序列的異常偵測。
由於結果可以發佈到 Glue Data Quality AWS 所使用的相同存放區,因此您可以關聯跨運算引擎的執行。共用 EvaluationContext(您傳遞至轉換的字串識別符) 的執行會在主控台和異常偵測訓練中顯示為單一邏輯資料集,無論它們是來自 Amazon EMR Spark 應用程式或 AWS Glue ETL 任務。
概念和術語
本章和 AWS Glue Data Quality APIs和主控台中都會顯示下列術語。
- 規則
-
有關資料集的單一宣告性聲明,以 DQDL 撰寫。例如
RowCount > 1000或IsUnique "order_id"。每個規則評估為Passed、Failed或Error。 - 規則集
-
在對 的單一呼叫中一起評估的指定規則集合
EvaluateDataQuality。 - 分析器
-
為資料集計算而不宣告通過或失敗結果的統計資料,例如
Mean "order_total"。分析器種子規則閾值並訓練異常偵測模型。請參閱 分析器。 - 資料品質分數
-
規則集中傳遞給指定執行的規則百分比,計算為
rules passed / (rules passed + rules failed)。錯誤和觀察不會對分數做出貢獻的規則。分數由 AWS Glue Data Quality APIs傳回,當您的應用程式設定 時publishToDataCatalogTarget,則會在屬性目錄資料表的資料品質索引標籤上 AWS Glue 主控台中的表面。 - 觀察
-
異常偵測標記為超出其預測範圍的值。觀察結果不會降低資料品質分數。請參閱 異常偵測。
EvaluationContext-
字串識別符,可將相同邏輯資料集的執行分組至運算引擎。共用 的執行
EvaluationContext會提供相同的異常偵測模型,並同時出現在 Glue AWS 主控台中。請參閱 比較跨 Amazon EMR 和 Glue AWS 執行。 - 發布
-
將
EvaluateDataQuality執行結果寫入 Glue Data Quality AWS 服務的步驟,以便稍後可以透過 AWS Glue Data Quality APIs 和 Glue AWS 主控台讀取。預設會啟用發佈,並由 中的enableDataQualityResultsPublishing金鑰控制publishing_options。每個發佈都由 鍵入EvaluationContext,這是異常偵測和跨引擎比較用於群組執行的識別符。當應用程式也設定 時publishToDataCatalogTarget,執行會歸因於目錄資料表,並顯示在 Glue AWS 主控台中該資料表的資料品質索引標籤中。 - DQDL
-
Data Quality Definition Language,用來撰寫 Data Quality 規則集的宣告性語言。請參閱 規則評估和 DQDL。
在管道中驗證的位置
您可以在 Spark 指令碼中的任何EvaluateDataQuality位置叫用 。三種常見模式為:
-
驗證前。讀取後立即評估原始輸入。在將運算花費在應用程式的其餘部分之前,請使用此選項在上游問題 (遺失檔案、結構描述偏離、空資料表) 上快速失敗。
-
內嵌驗證。在轉換之間評估中繼 DataFrame。使用此選項來檢查特定步驟的輸出 (例如聯結或彙總之後)。
-
驗證後。在寫入目的地之前評估最終 DataFrame。使用此選項在結果上鎖定下游發佈:資料
Outcome欄上的分支,並在任何規則失敗時中止寫入。
下列 PySpark 程式碼片段會針對驗證後評估的結果進行寫入。
results = EvaluateDataQuality.apply( frame=final_df, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "orders_daily", "enableDataQualityResultsPublishing": True, }, ) failed = results.filter("Outcome in ('Failed', 'Error')").count() if failed > 0: raise RuntimeError(f"{failed} data quality rules failed or errored; aborting write") final_df.write.mode("overwrite").parquet("s3://amzn-s3-demo-bucket/orders_curated/")
限制
-
單一規則集最多可包含 2,000 個規則。
-
規則集的序列化 DQDL 來源不得超過 65 KB。
-
Data Quality 會在您建立規則或分析器時收集統計資料。儲存這些統計資料不會產生相關費用。不過,每個帳戶限制 100,000 個統計資料,這些統計資料最多會保留兩年。
-
Data Quality 僅支援 Amazon EMR 上的 Apache Spark 應用程式。它不會在 Amazon EMR 支援的 Hive、Trino、Flink 或其他非 Spark 引擎上執行。