選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

資料品質定義語言 (DQDL) 參考

焦點模式
資料品質定義語言 (DQDL) 參考 - AWS Glue

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

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

Data Quality Definition Language (DQDL) 是網域特定的語言,可用來定義 Glue Data Quality AWS 的規則。

本指南介紹了關鍵的 DQDL 概念,可幫助您了解該語言。其中也提供 DQDL 規則類型的參考,內含語法和範例。在使用本指南之前,建議您先熟悉 AWS Glue Data Quality。如需詳細資訊,請參閱AWS Glue 資料品質

注意

僅 AWS Glue ETL 支援 DynamicRules。

DQDL 語法

DQDL 文件區分大小寫,且包含規則集,可將個別資料品質規則分組。若要建構規則集,您必須建立名為 Rules (大寫) 的清單,並以一對方括號分隔。如下列範例所示,清單應包含一或多個以逗號分隔的 DQDL 規則。

Rules = [ IsComplete "order-id", IsUnique "order-id" ]

規則結構

DQDL 規則的結構取決於規則類型。不過,DQDL 規則通常適合以下格式。

<RuleType> <Parameter> <Parameter> <Expression>

RuleType 是您要設定的規則類型名稱 (區分大小寫)。例如,IsCompleteIsUniqueCustomSql。每種規則類型的規則參數都不同。如需 DQDL 規則類型及其參數的完整參考資料,請參閱 DQDL 規則類型參考

複合規則

DQDL 支援下列可用來合併規則的邏輯運算子。這些規則稱為複合規則。

以及

當且僅當邏輯 and 運算子連接的規則為 true 時,其結果為 true。否則,合併規則的結果為 false。您使用 and 運算子連接的每個規則都必須以括號括住。

下列範例會使用 and 運算子來合併兩個 DQDL 規則。

(IsComplete "id") and (IsUnique "id")

當且僅當邏輯 or 運算子連接的一個或多個規則為 true 時,其結果為 true。您使用 or 運算子連接的每個規則都必須以括號括住。

下列範例會使用 or 運算子來合併兩個 DQDL 規則。

(RowCount "id" > 100) or (IsPrimaryKey "id")

您可以使用相同的運算子來連接多個規則,因此允許使用以下規則組合。

(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")

您可以將邏輯運算子合併為單一表達式。例如:

(Mean "Star_Rating" > 3) and ((Mean "Order_Total" > 500) or (IsComplete "Order_Id"))

您也可以撰寫更複雜的巢狀規則。

(RowCount > 0) or ((IsComplete "colA") and (IsUnique "colA"))

複合規則的運作方式

根據預設,複合規則會評估為整個資料集或資料表的個別規則,然後合併結果。換句話說,它會先評估整個資料欄,然後套用運算子。以下以範例說明此預設行為:

# Dataset +------+------+ |myCol1|myCol2| +------+------+ | 2| 1| | 0| 3| +------+------+ # Overall outcome +----------------------------------------------------------+-------+ |Rule |Outcome| +----------------------------------------------------------+-------+ |(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)|Failed | +----------------------------------------------------------+-------+

在上述範例中, 會AWS Glue Data Quality先評估(ColumnValues "myCol1" > 1)這會導致失敗。然後,它會評估(ColumnValues "myCol2" > 2)哪些 也會失敗。兩個結果的組合都會記錄為 FAILED。

不過,如果您偏好 SQL 類行為,其中您需要評估整個資料列,則必須明確設定 ruleEvaluation.scope 參數,如以下程式碼片段additionalOptions所示。

object GlueApp { val datasource = glueContext.getCatalogSource( database="<db>", tableName="<table>", transformationContext="datasource" ).getDynamicFrame() val ruleset = """ Rules = [ (ColumnValues "age" >= 26) OR (ColumnLength "name" >= 4) ] """ val dq_results = EvaluateDataQuality.processRows( frame=datasource, ruleset=ruleset, additionalOptions=JsonOptions(""" { "compositeRuleEvaluation.method":"ROW" } """ ) ) }

在 AWS Glue Data Catalog 中,您可以在使用者介面中輕鬆設定此選項,如下所示。

螢幕擷取畫面會顯示複合規則設定視窗,您可以在其中選擇資料列和資料欄之間的規則評估組態。如果您選擇資料列,複合規則將作為評估整個資料列的單一規則。如果您選擇資料欄,複合規則會評估整個資料集的個別規則,並合併結果。

設定後,複合規則將作為評估整個資料列的單一規則。下列範例說明此行為。

# Row Level outcome +------+------+------------------------------------------------------------+---------------------------+ |myCol1|myCol2|DataQualityRulesPass |DataQualityEvaluationResult| +------+------+------------------------------------------------------------+---------------------------+ |2 |1 |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed | |0 |3 |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed | +------+------+------------------------------------------------------------+---------------------------+

此功能不支援某些規則,因為其整體結果取決於閾值或比率。它們列於下方。

倚賴比率的規則:

  • 完整度

  • DatasetMatch

  • ReferentialIntegrity

  • Uniqueness

取決於閾值的規則:

當下列規則包含 與閾值時,不支援它們。不過,不涉及的規則with threshold仍然受到支援。

  • ColumnDataType

  • ColumnValues

  • CustomSQL

表達式

如果規則類型不會產生布林值回應,您必須提供運算式作為參數,才能建立布林值回應。例如,下列規則會根據表達式檢查欄中所有值的平均值,以傳回 true 或 false 結果。

Mean "colA" between 80 and 100

某些規則類型 (例如 IsUniqueIsComplete) 已傳回布林值回應。

下表列出您可以在 DQDL 規則中使用的運算式。

支援的 DQDL 運算式
表達式 描述 範例
=x 如果規則類型回應等於 x,則解析為 true
Completeness "colA" = "1.0", ColumnValues "colA" = "2022-06-30"
!=x 如果規則類型回應不等於 x,則 x 解析為 true。
ColumnValues "colA" != "a", ColumnValues "colA" != "2022-06-30"
> x 如果規則類型回應大於 x,則解析為 true
ColumnValues "colA" > 10
< x 如果規則類型回應小於 x,則解析為 true
ColumnValues "colA" < 1000, ColumnValues "colA" < "2022-06-30"
>= x 如果規則類型回應大於或等於 x,則解析為 true
ColumnValues "colA" >= 10
<= x 如果規則類型回應小於或等於 x,則解析為 true
ColumnValues "colA" <= 1000
between x and y 如果規則類型回應落在指定範圍內 (不含) 時,則解析為 true。只針對數字和日期類型使用此表達式類型。
Mean "colA" between 8 and 100, ColumnValues "colA" between "2022-05-31" and "2022-06-30"
不在 xy 之間 如果規則類型回應不在指定範圍內 (包含),則解析為 true。您應該只針對數字和日期類型使用此運算式類型。
ColumnValues "colA" not between "2022-05-31" and "2022-06-30"
in [a, b, c, ...] 如果規則類型回應在指定集中,則解析為 true
ColumnValues "colA" in [ 1, 2, 3 ], ColumnValues "colA" in [ "a", "b", "c" ]
不在 【a、b、c、...】 true 如果規則類型回應不在指定的集合中,則解析為 。
ColumnValues "colA" not in [ 1, 2, 3 ], ColumnValues "colA" not in [ "a", "b", "c" ]
matches /ab+c/i 如果規則類型回應符合規則運算式,則解析為 true
ColumnValues "colA" matches "[a-zA-Z]*"
不符合 /ab+c/i true 如果規則類型回應不符合規則表達式,則解析為 。
ColumnValues "colA" not matches "[a-zA-Z]*"
now() 僅適用於 ColumnValues 規則類型以建立日期運算式。
ColumnValues "load_date" > (now() - 3 days)
matches/in 【...】/not match/not in 【...】 with threshold 指定符合規則條件的值的百分比。僅適用於 ColumnValuesColumnDataTypeCustomSQL規則類型。
ColumnValues "colA" in ["A", "B"] with threshold > 0.8, ColumnValues "colA" matches "[a-zA-Z]*" with threshold between 0.2 and 0.9 ColumnDataType "colA" = "Timestamp" with threshold > 0.9

NULL、EMPTY 和 WHITESPACES_ONLY 的關鍵字

如果您想要驗證字串資料欄是否具有 null、空白或只有空格的字串,您可以使用下列關鍵字:

  • NULL / null – 此關鍵字會針對字串欄中null的值解析為 true。

    ColumnValues "colA" != NULL with threshold > 0.5 如果超過 50% 的資料沒有 null 值, 會傳回 true。

    (ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5) 對於具有 null 值或長度 >5 的所有資料列, 會傳回 true。請注意,這將需要使用「compositeRuleEvaluation.method” =「ROW」選項。

  • EMPTY / empty – 對於字串欄中的空字串 (“”) 值,此關鍵字解析為 true。有些資料格式會將字串欄中的 null 轉換為空白字串。此關鍵字有助於篩選資料中的空字串。

    (ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"]) 如果資料列為空、「a」或「b」, 會傳回 true。請注意,這需要使用「compositeRuleEvaluation.method” =「ROW」選項。

  • WHITESPACES_ONLY / whitespaces_only – 對於字串欄中只有空格 (“”) 值的字串,此關鍵字會解析為 true。

    ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY] 如果資料列不是「a」或「b」,也不只是空格,則 會傳回 true。

    支援的規則:

對於以數字或日期為基礎的表達式,如果您想要驗證資料欄是否具有 null,您可以使用下列關鍵字。

  • NULL / null – 此關鍵字會針對字串欄中的 null 值解析為 true。

    ColumnValues "colA" in [NULL, "2023-01-01"] 如果資料欄中的日期為 2023-01-01或 null, 會傳回 true。

    (ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9) 對於具有 null 值或值介於 1 到 9 的所有資料列, 會傳回 true。請注意,這將需要使用「compositeRuleEvaluation.method” =「ROW」選項。

    支援的規則:

使用 區段進行篩選

注意

其中條款僅在 AWS Glue 4.0 中受支援。

您可以在撰寫規則時篩選資料。當您想要套用條件式規則時,這會很有幫助。

<DQDL Rule> where "<valid SparkSQL where clause> "

必須使用where關鍵字指定篩選條件,後面接著以引號 括住的有效 SparkSQL 陳述式("")

如果您想要將 where 子句新增至具有閾值的規則的規則,則應在閾值條件之前指定 where 子句。

<DQDL Rule> where "valid SparkSQL statement>" with threshold <threshold condition>

使用此語法,您可以撰寫如下的規則。

Completeness "colA" > 0.5 where "colB = 10" ColumnValues "colB" in ["A", "B"] where "colC is not null" with threshold > 0.9 ColumnLength "colC" > 10 where "colD != Concat(colE, colF)"

我們將驗證提供的 SparkSQL 陳述式是否有效。如果無效,則規則評估將會失敗,而且我們會擲回IllegalArgumentException具有下列格式的 :

Rule <DQDL Rule> where "<invalid SparkSQL>" has provided an invalid where clause : <SparkSQL Error>

資料列層級錯誤記錄識別開啟時的子句行為

透過 AWS Glue Data Quality,您可以識別失敗的特定記錄。將 where 子句套用到支援資料列層級結果的規則時,我們會將由 where 子句篩選的資料列標記為 Passed

如果您偏好將篩選出的資料列單獨標記為 SKIPPED,您可以additionalOptions為 ETL 任務設定下列項目。

object GlueApp { val datasource = glueContext.getCatalogSource( database="<db>", tableName="<table>", transformationContext="datasource" ).getDynamicFrame() val ruleset = """ Rules = [ IsComplete "att2" where "att1 = 'a'" ] """ val dq_results = EvaluateDataQuality.processRows( frame=datasource, ruleset=ruleset, additionalOptions=JsonOptions(""" { "rowLevelConfiguration.filteredRowLabel":"SKIPPED" } """ ) ) }

例如,請參閱下列規則和資料架構:

IsComplete att2 where "att1 = 'a'"
id att1 att2 資料列層級結果 (預設) 資料列層級結果 (略過的選項) 說明
1 a f 通過 通過
2 b d 通過 略過 資料列會篩選掉,因為 att1 不是 "a"
3 a null 失敗 失敗
4 a f 通過 通過
5 b null 通過 略過 資料列會篩選掉,因為 att1 不是 "a"
6 a f 通過 通過

動態規則

注意

動態規則僅在 AWS Glue ETL 中支援,且在 Glue Data Catalog AWS 中不支援。

您現在可以編寫動態規則,將規則產生的目前指標與其歷史值進行比較。這些歷史比較是透過在表達式中使用 last() 運算子來啟用。例如,當目前執行中的資料列數目大於相同資料集的最近先前一個資料列計數時,規則 RowCount > last() 便會成功。last() 採用可選的自然數引數,描述要考慮的先前指標;last(k)k >= 1 將參考最後 k 個指標。

  • 如果沒有可用的資料點,last(k) 將傳回預設值 0.0。

  • 如果可用的指標少於 klast(k) 將傳回所有先前的指標。

為了形成使用 last(k) 的有效表達式,k > 1 需要彙總函數將多個歷史結果簡化為一個數字。例如,RowCount > avg(last(5)) 將檢查目前資料集的資料列計數是否嚴格大於相同資料集最後五個資料列計數的平均值。RowCount > last(5) 將產生錯誤,因為當前資料集的資料列計數不能與清單進行有意義的比較。

支援的彙總函數:

  • avg

  • median

  • max

  • min

  • sum

  • std (標準偏差)

  • abs (絕對值)

  • index(last(k), i) 將允許從最後 k 個值中選取第 i 個最近的值。i 從零開始索引,所以 index(last(3), 0) 將傳回最新的資料點;而 index(last(3), 3) 會導致錯誤,因為只有三個資料點,但我們嘗試對第 4 個最新的資料點編製索引。

範例表達式

ColumnCorrelation

  • ColumnCorrelation "colA" "colB" < avg(last(10))

DistinctValuesCount

  • DistinctValuesCount "colA" between min(last(10))-1 and max(last(10))+1

大多數具有數值條件或閾值的規則類型都支援動態規則;請參閱提供的資料表分析器和規則,判斷規則類型是否支援動態規則。

從動態規則排除統計資料

有時候,您將需要從動態規則計算中排除資料統計資料。假設您執行了歷史資料載入,而您不希望它影響您的平均值。若要執行此操作,請在 Glue ETL AWS 中開啟任務,然後選擇資料品質索引標籤,然後選擇統計資料,然後選擇您要排除的統計資料。您將能夠看到趨勢圖表以及統計資訊表。選取您要排除的值,然後選擇排除統計資料。現在,排除的統計資料不會包含在動態規則計算中。

螢幕擷取畫面顯示選擇統計資料後,從下拉式選單中排除或包含統計資料的選項。

分析器

注意

Glue Data Catalog AWS 不支援分析器。

DQDL 規則使用名為 Analyzers 的函數來收集與資料有關的資訊。規則的布林表達式會使用此資訊來判斷規則是成功或是失敗。例如,RowCount 規則 RowCount > 5 會使用資料列計數分析器來探索資料集中的資料列數目,並將該計數與表達式 > 5 進行比較,從而檢查目前資料集中是否存在五個以上的資料列。

有時候,我們建議您建立分析器而不是撰寫規則,然後讓這些分析器產生可用來偵測異常的統計資料。對於這種情況,您可以建立分析器。分析器與規則有下列不同之處。

特性 分析器 規則
規則集的一部分
產生統計資料
產生觀察
可以評估和斷言條件
您可以設定動作,例如在失敗時停止作業、繼續處理作業

分析器可以在沒有規則的情況下獨立存在,因此您可以快速設定這些分析器並逐步建置資料品質規則。

您可以在規則集的 Analyzers 區塊中輸入某些規則類型,以執行分析器所需的規則並收集資訊,而無需對任何條件套用檢查。某些分析器不會與規則相關聯,在 Analyzers 區塊中只能作為輸入。下表指出每個項目是否受到規則或獨立分析器的支援,以及每個規則類型的其他詳細資訊。

使用 Analyzer 的範例 Ruleset

以下規則集使用:

  • 動態規則,檢查資料集的成長速度是否超過在過去三次作業執行的結尾平均值

  • DistinctValuesCount 分析器,記錄資料集 Name 資料欄中相異值的數目

  • ColumnLength 分析器,追蹤隨時間變化的最小和最大 Name 尺寸

您可以在作業執行的「資料品質」索引標籤中檢視分析器指標結果。

Rules = [ RowCount > avg(last(3)) ] Analyzers = [ DistinctValuesCount "Name", ColumnLength "Name" ]

AWS Glue Data Quality 支援下列分析器。

Analyzer 名稱 功能
RowCount 計算資料集的資料列計數
Completeness 計算資料欄的完整性百分比
Uniqueness 計算資料欄的唯一性百分比
Mean 計算數值資料欄的平均值
Sum 計算數值資料欄的總和
StandardDeviation 計算數值欄的標準差
Entropy 計算數值資料欄的熵
DistinctValuesCount 計算資料欄中不同值的數量
UniqueValueRatio 計算資料欄中的唯一值比率
ColumnCount 計算資料集中的資料欄數
ColumnLength 計算資料欄的長度
ColumnValues 計算數值資料欄的最小值和最大值。運算非數值資料ColumnLength的 Minimum ColumnLength 和 Maximum ColumnLength
ColumnCorrelation 計算指定資料欄的資料欄關聯性
CustomSql 計算 CustomSQL 傳回的統計資料
AllStatistics 計算下列統計資料:
  • RowCount、ColumnCount

  • 每一欄:完整性、唯一性

  • 數值:Min、Max、Entropy、Mean、Standard Dev、Sum

  • 字串:MinLength、MaxLength

說明

您可以使用 '#' 字元將註解新增至 DQDL 文件。'#' 字元之後到 DQDL 忽略行尾的任何內容。

Rules = [ # More items should generally mean a higher price, so correlation should be positive ColumnCorrelation "price" "num_items" > 0 ]
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。