

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

# DQDL 規則類型參考
<a name="dqdl-rule-types"></a>

本節提供 Glue Data Quality AWS 支援的每個規則類型的參考。

**注意**  
DQDL 目前不支援巢狀或清單類型的資料欄資料。
下表中括號內的值將被替換為規則引數中提供的資訊。
規則通常需要表達式的額外引數。


| Ruletype | Description | 引數 | 報告的指標 | 支援作為規則？ | 支援作為分析器？ | 傳回資料列層級結果？ | 動態規則支援？ | 產生觀察 | 支援哪些子句語法？ | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AggregateMatch | 透過比較諸如總銷售額等摘要指標，檢查兩個資料集是否相符。這可讓金融機構比較是否從來源系統中擷取所有資料，因此非常實用。 | 一或多個彙總 |  當第一個和第二個彙總資料欄名稱相符時： `Column.[Column].AggregateMatch` 當第一個和第二個彙總資料欄名稱不相符時： `Column.[Column1,Column2].AggregateMatch`  | 是 | 否 | 否 | 否 | 否 | 否 | 
| AllStatistics | 獨立分析器，可為資料集中提供的資料欄收集多個指標。 | 單一資料欄名稱 |  所有類型的資料欄： `Dataset.*.RowCount` `Column.[Column].Completeness` `Column.[Column].Uniqueness` 字串值資料欄的其他指標： `ColumnLength metrics` 數值資料欄的其他指標： `ColumnValues metrics`  | 否 | 是 | 否 | 否 | 否 | 否 | 
| ColumnCorrelation | 檢查兩個資料欄如何相互關聯。 | 剛好兩個資料欄名稱 | Multicolumn.[Column1,Column2].ColumnCorrelation | 是 | 是 | 否 | 是 | 否 | 是 | 
| ColumnCount | 檢查是否有任何資料欄遭到捨棄。 | 無 | Dataset.\$1.ColumnCount | 是 | 是 | 否 | 是 | 是 | 否 | 
| ColumnDataType | 檢查資料欄是否與資料類型相容。 | 剛好一個資料欄名稱 | Column.[Column].ColumnDataType.Compliance | 是 | 否 | 否 | 是，在資料列層級閾值表達式中 | 否 | 是 | 
| ColumnExists | 檢查資料集中是否存在資料欄。這可讓客戶建立自助式資料平台，確保某些資料欄可供使用。 | 剛好一個資料欄名稱 | N/A | 是 | 否 | 否 | 否 | 否 | 否 | 
| ColumnLength | 檢查資料的長度是否一致。 | 剛好一個資料欄名稱 |  `Column.[Column].MaximumLength` `Column.[Column].MinimumLength` 提供資料列層級閾值時的其他指標： `Column.[Column].ColumnValues.Compliance`  | 是 | 是 | 是，當提供資料列層級臨界值時 | 否 | 是。僅透過分析最小和最大長度來產生觀察 | 是 | 
| ColumnNamesMatchPattern | 檢查資料欄名稱是否與定義的模式相符。對於控管團隊強制執行資料欄名稱一致性非常實用。 | 資料欄名稱的 regex | Dataset.\$1.ColumnNamesPatternMatchRatio | 是 | 否 | 否 | 否 | 否 | 否 | 
| ColumnValues | 檢查每個定義值的資料是否一致。此規則支援規則運算式。 | 剛好一個資料欄名稱 |  `Column.[Column].Maximum` `Column.[Column].Minimum` 提供資料列層級閾值時的其他指標： `Column.[Column].ColumnValues.Compliance`  | 是 | 是 | 是，當提供資料列層級臨界值時 | 否 | 是。僅透過分析最小和最大值來產生觀察 | 是 | 
| 完整度 | 檢查資料中是否有任何空白或 NULL 值。 | 剛好一個資料欄名稱 | `Column.[Column].Completeness` | 是 | 是 | 是 | 是 | 是 | 是 | 
| CustomSql |  客戶可以在 SQL 中實作幾乎所有類型的資料品質檢查。 |  SQL 陳述式 (選用) 資料列層級閾值  |  `Dataset.*.CustomSQL` 提供資料列層級閾值時的其他指標： `Dataset.*.CustomSQL.Compliance`  | 是 | 否 | 是，當提供資料列層級臨界值時 | 是 | 否 | 否 | 
| DataFreshness | 檢查資料是否為最新狀態。 | 剛好一個資料欄名稱 | Column.[Column].DataFreshness.Compliance | 是 | 否 | 是 | 否 | 否 | 是 | 
| DatasetMatch | 比較兩個資料集並識別其是否同步。 |  參考資料集的名稱 資料欄映射 (選用) 要檢查相符項目的資料欄  | Dataset.[ReferenceDatasetAlias].DatasetMatch | 是 | 否 | 是 | 是 | 否 | 否 | 
| DistinctValuesCount | 檢查重複值。 | 剛好一個資料欄名稱 | Column.[Column].DistinctValuesCount | 是 | 是 | 是 | 是 | 是 | 是 | 
| DetectAnomalies | 檢查其他規則類型報告指標中的異常。 | 規則類型 | 規則類型引數報告的指標 | 是 | 否 | 否 | 否 | 否 | 否 | 
| Entropy | 檢查資料的熵。 | 剛好一個資料欄名稱 | Column.[Column].Entropy | 是 | 是 | 否 | 是 | 否 | 是 | 
| IsComplete | 檢查是否 100% 的資料皆為已完成。 | 剛好一個資料欄名稱 | Column.[Column].Completeness | 是 | 否 | 是 | 否 | 否 | 是 | 
| IsPrimaryKey | 檢查資料欄是否為主索引鍵 (非 NULL 且是唯一的)。 | 剛好一個資料欄名稱 |  對於單一資料欄： `Column.[Column].Uniqueness` 對於多個資料欄： `Multicolumn.[CommaDelimitedColumns].Uniqueness`  | 是 | 否 | 是 | 否 | 否 | 是 | 
| IsUnique | 檢查是否 100% 的資料皆為唯一。 | 剛好一個資料欄名稱 | Column.[Column].Uniqueness | 是 | 否 | 是 | 否 | 否 | 是 | 
| Mean | 檢查平均值是否與設定的閾值相符。 | 剛好一個資料欄名稱 | Column.[Column].Mean | 是 | 是 | 是 | 是 | 否 | 是 | 
| ReferentialIntegrity | 檢查兩個資料集是否具有參照完整性。 |  資料集中一或多個資料欄名稱 參考資料集中的一或多個資料欄名稱  | Column.[ReferenceDatasetAlias].ReferentialIntegrity | 是 | 否 | 是 | 是 | 否 | 否 | 
| RowCount | 檢查記錄計數是否與閾值相符。 | 無 | Dataset.\$1.RowCount | 是 | 是 | 否 | 是 | 是 | 是 | 
| RowCountMatch | 檢查兩個資料集之間的記錄計數是否相符。 | 參考資料集別名 | Dataset.[ReferenceDatasetAlias].RowCountMatch | 是 | 否 | 否 | 是 | 否 | 否 | 
| StandardDeviation | 檢查標準差是否與閥值相符。 | 剛好一個資料欄名稱 | Column.[Column].StandardDeviation | 是 | 是 | 是 | 是 | 否 | 是 | 
| SchemaMatch | 檢查兩個資料集之間的結構描述是否相符。 | 參考資料集別名 | Dataset.[ReferenceDatasetAlias].SchemaMatch | 是 | 否 | 否 | 是 | 否 | 否 | 
| Sum | 檢查總和是否與設定的閾值相符。 | 剛好一個資料欄名稱 | Column.[Column].Sum | 是 | 是 | 否 | 是 | 否 | 是 | 
| Uniqueness | 檢查資料集的唯一性是否與閾值相符。 | 剛好一個資料欄名稱 | Column.[Column].Uniqueness | 是 | 是 | 是 | 是 | 否 | 是 | 
| UniqueValueRatio | 檢查唯一值定量是否與閥值相符。 | 剛好一個資料欄名稱 | Column.[Column].UniqueValueRatio | 是 | 是 | 是 | 是 | 否 | 是 | 
| FileFreshness | 檢查 Amazon S3 中的檔案是否新鮮。 | 檔案或資料夾路徑和閾值。 |  `Dataset.*.FileFreshness.Compliance` `Dataset.*.FileCount`  | 是 | 否 | 否 | 否 | 否 | 否 | 
| FileMatch | 檢查檔案的內容是否符合檢查總和或其他檔案。此規則使用檢查總和來驗證兩個檔案是否相同。 | 來源檔案或資料夾路徑，及目標檔案或資料夾路徑。 | 不會產生統計資料。 | 是 | 否 | 否 | 否 | 否 | 否 | 
| FileSize | 檢查檔案大小是否符合指定的條件。 | 檔案或資料夾路徑和閾值。 | `Dataset.*.FileSize.Compliance` `Dataset.*.FileCount` `Dataset.*.MaximumFileSize` `Dataset.*.MinimumFileSize`  | 是 | 否 | 否 | 否 | 否 | 否 | 
| FileUniqueness | 使用檢查總和檢查檔案是否是唯一的。 | 檔案或資料夾路徑和閾值。 | `Dataset.*.FileUniquenessRatio` `Dataset.*.FileCount`  | 是 | 否 | 否 | 否 | 否 | 否 | 

**Topics**
+ [AggregateMatch](dqdl-rule-types-AggregateMatch.md)
+ [ColumnCorrelation](dqdl-rule-types-ColumnCorrelation.md)
+ [ColumnCount](dqdl-rule-types-ColumnCount.md)
+ [ColumnDataType](dqdl-rule-types-ColumnDataType.md)
+ [ColumnExists](dqdl-rule-types-ColumnExists.md)
+ [ColumnLength](dqdl-rule-types-ColumnLength.md)
+ [ColumnNamesMatchPattern](dqdl-rule-types-ColumnNamesMatchPattern.md)
+ [ColumnValues](dqdl-rule-types-ColumnValues.md)
+ [完整度](dqdl-rule-types-Completeness.md)
+ [CustomSQL](dqdl-rule-types-CustomSql.md)
+ [DataFreshness](dqdl-rule-types-DataFreshness.md)
+ [DatasetMatch](dqdl-rule-types-DatasetMatch.md)
+ [DistinctValuesCount](dqdl-rule-types-DistinctValuesCount.md)
+ [Entropy](dqdl-rule-types-Entropy.md)
+ [IsComplete](dqdl-rule-types-IsComplete.md)
+ [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
+ [IsUnique](dqdl-rule-types-IsUnique.md)
+ [Mean](dqdl-rule-types-Mean.md)
+ [ReferentialIntegrity](dqdl-rule-types-ReferentialIntegrity.md)
+ [RowCount](dqdl-rule-types-RowCount.md)
+ [RowCountMatch](dqdl-rule-types-RowCountMatch.md)
+ [StandardDeviation](dqdl-rule-types-StandardDeviation.md)
+ [總和](dqdl-rule-types-Sum.md)
+ [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
+ [唯一性](dqdl-rule-types-Uniqueness.md)
+ [UniqueValueRatio](dqdl-rule-types-UniqueValueRatio.md)
+ [DetectAnomalies](dqdl-rule-types-DetectAnomalies.md)
+ [FileFreshness](dqdl-rule-types-FileFreshness.md)
+ [FileMatch](dqdl-rule-types-FileMatch.md)
+ [FileUniqueness](dqdl-rule-types-FileUniqueness.md)
+ [FileSize](dqdl-rule-types-FileSize.md)

# AggregateMatch
<a name="dqdl-rule-types-AggregateMatch"></a>

根據指定運算式檢查兩個資料欄彙總的比率。此規則類型適用於多個資料集。系統會評估兩個資料欄彙總，並將第一個資料欄彙總的結果除以第二個資料欄彙總的結果來產生比率。系統會根據提供的運算式檢查比率，以產生布林值回應。

**語法**

**資料欄彙總**

```
AggregateMatch <AGG_OPERATION> (<OPTIONAL_REFERENCE_ALIAS>.<COL_NAME>)
```
+ **AGG\$1OPERATION**：用於彙總的操作。目前支援 `sum` 和 `avg`。

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **OPTIONAL\$1REFERENCE\$1ALIAS**：若資料欄來自參考資料集且不是主資料集，則需提供此參數。如果您在 AWS Glue Data Catalog 中使用此規則，您的參考別名必須遵循格式 "<database\$1name>.<table\$1name>.<column\$1name>

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **COL\$1NAME**：要彙總的資料欄名稱。

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數

**範例：平均值**

```
"avg(rating)"
```

**範例：總和**

```
"sum(amount)"
```

**範例：參考資料集中資料欄的平均值**

```
"avg(reference.rating)"
```

**規則**

```
AggregateMatch <AGG_EXP_1> <AGG_EXP_2> <EXPRESSION>
```
+ **AGG\$1EXP\$11**：第一個資料欄彙總。

  支援的資料欄類型：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **AGG\$1EXP\$12**：第二個資料欄彙總。

  支援的資料欄類型：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：使用總和執行彙總比對**

下列範例規則會檢查 `amount` 資料欄中的值總和是否與 `total_amount` 資料欄中的值總和完全相等。

```
AggregateMatch "sum(amount)" "sum(total_amount)" = 1.0
```

**範例：使用平均值執行彙總比對**

下列範例規則會檢查 `ratings` 資料欄中值的平均值是否至少等於 `reference` 資料集之 `ratings` 資料欄中值的平均值的 90%。參考資料集會提供為 ETL 或資料目錄體驗中的其他資料來源。

在 AWS Glue ETL 中，您可以使用：

```
AggregateMatch "avg(ratings)" "avg(reference.ratings)" >= 0.9
```

在 AWS Glue Data Catalog 中，您可以使用：

```
AggregateMatch "avg(ratings)" "avg(database_name.tablename.ratings)" >= 0.9
```

**Null 行為**

 在計算彙總方法 (總和/平均值) 時，`AggregateMatch` 規則會忽略具有 NULL 值的資料列。例如：

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          | 
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 資料欄 `units` 的平均值將為 (0 \$1 20 \$1 40) / 3 = 20。此計算不會考慮資料列 101 和 103。

# ColumnCorrelation
<a name="dqdl-rule-types-ColumnCorrelation"></a>

檢查兩個資料欄與指定表達式之間的*關聯*性。 AWS Glue Data Quality 使用 Pearson 關聯係數來測量兩個資料欄之間的線性關聯性。結果為 -1 到 1 之間的數字，用於測量關係的強度和方向。

**語法**

```
ColumnCorrelation <COL_1_NAME> <COL_2_NAME> <EXPRESSION>
```
+ **COL\$11\$1NAME** – 您要評估資料品質規則的第一欄名稱。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **COL\$12\$1NAME** – 您要評估資料品質規則的第二個資料欄名稱。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：欄關聯性**

下列範例規則會檢查欄 `height` 和 `weight` 之間的關聯性係數是否具有較強的正關聯性 (係數值大於 0.8)。

```
ColumnCorrelation "height" "weight" > 0.8
```

```
ColumnCorrelation "weightinkgs" "Salary" > 0.8 where "weightinkgs > 40"
```

 **動態規則範例** 
+ `ColumnCorrelation "colA" "colB" between min(last(10)) and max(last(10))`
+ `ColumnCorrelation "colA" "colB" < avg(last(5)) + std(last(5))`

**Null 行為**

 `ColumnCorrelation` 規則會忽略計算相互關聯時值為 `NULL` 的資料列。例如：

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          | 
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 資料列 101 和 103 會遭到忽略，而 `ColumnCorrelation` 將為 1.0。

# ColumnCount
<a name="dqdl-rule-types-ColumnCount"></a>

根據指定的運算式檢查主資料集的資料欄計數。在該運算式中，您可以使用 `>` 和 `<` 之類的運算子指定資料欄的數量或範圍。

**語法**

```
ColumnCount <EXPRESSION>
```
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：資料欄計數數字檢查**

下列範例規則會檢查資料欄計數是否位於指定範圍內。

```
ColumnCount between 10 and 20
```

**動態規則範例**
+ `ColumnCount >= avg(last(10))`
+ `ColumnCount between min(last(10))-1 and max(last(10))+1`

# ColumnDataType
<a name="dqdl-rule-types-ColumnDataType"></a>

 檢查所指定資料欄中的值是否可以在 Apache Spark 中轉換為提供的類型。接受 `with threshold` 運算式以檢查資料欄中值的子集。

 **語法** 

```
ColumnDataType <COL_NAME> = <EXPECTED_TYPE>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  支援的資料欄類型：字串類型

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPECTED\$1TYPE**：資料欄中值的預期類型。

  支援的值：布林值、日期、時間戳記、整數、雙精度浮點數、浮點數、長整數

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION**：選用的運算式，用於指定應屬於預期類型之值的百分比。

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數

 **範例：使用資料欄資料類型整數作為字串** 

 下列範例規則會檢查所指定資料欄中的值 (類型為字串) 是否可轉換為整數。

```
ColumnDataType "colA" = "INTEGER"
```

 **範例：使用資料欄類型整數作為字串以檢查值的子集** 

 下列範例規則會檢查所指定資料欄中是否有超過 90% 的值 (類型為字串) 可轉換為整數。

```
ColumnDataType "colA" = "INTEGER" with threshold > 0.9
```

# ColumnExists
<a name="dqdl-rule-types-ColumnExists"></a>

檢查欄是否存在。

**語法**

```
ColumnExists <COL_NAME>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型

**範例：欄存在**

下列範例規則會檢查名為 `Middle_Name` 的欄是否存在。

```
ColumnExists "Middle_Name"
```

# ColumnLength
<a name="dqdl-rule-types-ColumnLength"></a>

檢查欄中的每一列長度是否符合指定的運算式。

**語法**

```
ColumnLength <COL_NAME><EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：字串
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：欄列長度**

下列範例規則會檢查名為 `Postal_Code` 的欄中每一列的值是否為 5 個字元長。

```
ColumnLength "Postal_Code" = 5
ColumnLength "weightinkgs" = 2 where "weightinkgs > 10"
```

**Null 行為**

 `ColumnLength` 規則會將 `NULL` 視為 0 長度字串。對於 `NULL` 資料列：

```
ColumnLength "Postal_Code" > 4 # this will fail
```

```
ColumnLength "Postal_Code" < 6 # this will succeed 
```

 以下範例複合規則提供了一種明確使 `NULL` 值失敗的方法：

```
(ColumnLength "Postal_Code" > 4) AND (ColumnValues "Postal_Code" != NULL)
```

# ColumnNamesMatchPattern
<a name="dqdl-rule-types-ColumnNamesMatchPattern"></a>

檢查主資料集中所有資料欄的名稱是否與指定的規則運算式相符。

**語法**

```
ColumnNamesMatchPattern <PATTERN>
```
+ **PATTERN**：您要根據其評估資料品質規則的模式。

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數

**範例：資料欄名稱與模式相符**

下列範例規則會檢查是否所有資料欄皆以 "aws\$1" 字首開頭

```
ColumnNamesMatchPattern "aws_.*"
ColumnNamesMatchPattern "aws_.*" where "weightinkgs > 10"
```

# ColumnValues
<a name="dqdl-rule-types-ColumnValues"></a>

您可以針對欄中的值執行運算式。

**語法**

```
ColumnValues <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：允許的值**

下列範例規則會檢查指定欄中的每個值是否位於一組允許的值中 (包括 null、空白和僅包含空格的字串)。

```
ColumnValues "Country" in [ "US", "CA", "UK", NULL, EMPTY, WHITESPACES_ONLY ]
ColumnValues "gender" in ["F", "M"] where "weightinkgs < 10"
```

**範例：規則運算式**

下列範例規則會根據規則運算式檢查欄中的值。

```
ColumnValues "First_Name" matches "[a-zA-Z]*"
```

**範例：日期值**

下列範例規則會根據日期運算式檢查日期欄中的值。

```
ColumnValues "Load_Date" > (now() - 3 days)
```

**範例：數值**

下列範例規則會檢查欄值是否符合特定數值限制條件。

```
ColumnValues "Customer_ID" between 1 and 2000
```

**Null 行為**

 對於所有 `ColumnValues` 規則 (`!=` 和 `NOT IN` 除外)，`NULL` 資料列將不符合規則。如果規則因 null 值而失敗，則失敗原因會顯示下列項目：

```
Value: NULL does not meet the constraint requirement!
```

 下列範例複合規則提供明確允許 `NULL` 值的方法：

```
(ColumnValues "Age" > 21) OR (ColumnValues "Age" = NULL)
```

 使用 `!=` 和 `not in` 語法的否定 ColumnValues 規則會傳遞給 `NULL` 資料列。例如：

```
ColumnValues "Age" != 21
```

```
ColumnValues "Age" not in [21, 22, 23]
```

 下列範例提供明確使 `NULL` 值失敗的方法 

```
(ColumnValues "Age" != 21) AND (ColumnValues "Age" != NULL)
```

```
ColumnValues "Age" not in [21, 22, 23, NULL]
```

# 完整度
<a name="dqdl-rule-types-Completeness"></a>

根據指定運算式檢查欄中完整 (非空) 值的百分比。

**語法**

```
Completeness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：空值百分比**

下列範例規則會檢查欄中 95% 以上的值是否已完成。

```
Completeness "First_Name" > 0.95
Completeness "First_Name" > 0.95 where "weightinkgs > 10"
```

 **動態規則範例** 
+ `Completeness "colA" between min(last(5)) - 1 and max(last(5)) + 1`
+ `Completeness "colA" <= avg(last(10))`

**Null 行為**

 CSV 資料格式注意事項：CSV 資料欄上的空白資料列可以顯示多種行為。
+  如果資料欄是 `String` 類型，則空白資料列將辨識為空白字串，並且不會使 `Completeness` 規則失敗。
+  如果資料欄屬於其他資料類型 (例如 `Int`)，則空白資料列會辨識為 `NULL`，且會使 `Completeness` 規則失敗。

# CustomSQL
<a name="dqdl-rule-types-CustomSql"></a>

此規則類型已經過延伸，可支援兩種使用案例：
+ 針對資料集執行自訂 SQL 陳述式，並根據指定的運算式檢查傳回值。
+ 執行自訂 SQL 陳述式，其中您可以在 SELECT 陳述式中指定資料欄名稱，以便與某些條件進行比較來取得資料列層級結果。

**語法**

```
CustomSql <SQL_STATEMENT> <EXPRESSION>
```
+ **SQL\$1STATEMENT** – 傳回單一數值的 SQL 陳述式，並以雙引號括住。
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：用於擷取整體規則結果的自訂 SQL**

此範例規則使用 SQL 陳述式來擷取資料集的記錄計數。然後規則會檢查記錄計數是否在 10 到 20 之間。

```
CustomSql "select count(*) from primary" between 10 and 20
```

**範例：用於擷取資料列層級結果的自訂 SQL**

此範例規則使用 SQL 陳述式，其中您可以在 SELECT 陳述式中指定資料欄名稱，以便與某些條件進行比較來取得資料列層級結果。閥值條件運算式定義了導致整個規則失敗的記錄失敗數量閥值。請注意，規則不能同時包含條件和關鍵字。

```
CustomSql "select Name from primary where Age  > 18"
```

或

```
CustomSql "select Name from primary where Age > 18" with threshold  > 3
```

**重要**  
`primary` 別名代表您要評估的資料集名稱。當您在主控台上使用視覺化 ETL 任務時，`primary` 一律代表正在傳遞至 `EvaluateDataQuality.apply()` 轉換的 `DynamicFrame`。當您使用 AWS Glue Data Catalog 對資料表執行資料品質任務時， `primary`代表資料表。

如果您是使用 AWS Glue Data Catalog，則也可以使用實際的資料表名稱：

```
CustomSql "select count(*) from database.table" between 10 and 20
```

您還可以聯結多個資料表來比較不同的資料元素：

```
CustomSql "select count(*) from database.table inner join database.table2 on id1 = id2" between 10 and 20
```

 在 AWS Glue ETL 中，CustomSQL 可以識別資料品質檢查失敗的記錄。您需要傳回屬於目前正在評估資料品質的主資料表的記錄，才能使用此功能。作為查詢的一部分傳回的記錄會視為成功，未傳回的記錄則會視為失敗。這可透過將 CustomSQL 查詢的結果與原始資料集聯結來運作。根據 SQL 查詢的複雜性，可能會對效能產生影響。

 若要執行此作業：
+  您需要從主要資料表中選取至少 1 個資料欄。
  +  `select count(*) from primary` 是 OVERALL CustomSQL DQ 規則的有效查詢，但不適用於資料列層級自訂 SQL。
  +  此規則會在評估期間擲回錯誤：`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 the columns from the SQL result are not present in the Input Dataset. Ensure that matching columns are returned from the SQL.`
+  在 SQL 查詢中，從您的資料表中選取「主索引鍵」，或選取一組組成複合金鑰的資料欄。否則，可能會因相符重複資料列而導致結果不一致並降低效能。
+  僅從您的主要資料表選取金鑰，而非從您的參考資料表選取金鑰。

下列規則會確保將期限小於 100 的記錄識別為成功，並將超過該數值的記錄標記為失敗。

```
CustomSql "select id from primary where age < 100" 
```

若有 50% 的記錄的期限大於 10，此 CustomSQL 規則將通過，且會一併識別失敗的記錄。此 CustomSQL 傳回的記錄將會視為通過，而未傳回的記錄將會視為失敗。

```
CustomSQL "select ID, CustomerID from primary where age > 10" with threshold > 0.5
```

注意：如果您傳回無法在資料集中使用的記錄，CustomSQL 規則將會失敗。

# DataFreshness
<a name="dqdl-rule-types-DataFreshness"></a>

評估目前時間與日期欄值之間的差異，以檢查欄中資料的更新狀態。您可以為此規則類型指定以時間為基礎的運算式，確保欄值處於最新狀態。

**語法**

```
DataFreshness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：日期 
+ **EXPRESSION** - 以小時或天為單位的數值運算式。您必須在運算式中指定時間單位。

**範例：資料更新狀態**

下列範例規則會檢查資料更新狀態。

```
DataFreshness "Order_Date" <= 24 hours
DataFreshness "Order_Date" between 2 days and 5 days
```

**Null 行為**

 具有 `NULL` 值的資料列的 `DataFreshness` 規則將會失敗。如果規則因 null 值而失敗，則失敗原因會顯示下列項目：

```
80.00 % of rows passed the threshold
```

 失敗的資料列中有 20% 包含具有 `NULL` 的資料列。

 下列範例複合規則提供明確允許 `NULL` 值的方法：

```
(DataFreshness "Order_Date" <= 24 hours) OR (ColumnValues "Order_Date" = NULL)
```

**Amazon S3 物件的資料新鮮度**

 有時，您需要根據 Amazon S3 檔案建立時間來驗證資料的新鮮度。若要這樣做，您可以使用下列程式碼來取得時間戳記，並將其新增至資料框架，然後套用「資料新鮮度」檢查。

```
df = glueContext.create_data_frame.from_catalog(database = "default", table_name = "mytable")
df = df.withColumn("file_ts", df["_metadata.file_modification_time"])

Rules = [
 DataFreshness "file_ts" < 24 hours 
]
```

# DatasetMatch
<a name="dqdl-rule-types-DatasetMatch"></a>

 檢查主資料集中的資料是否與參考資料集中的資料相符。系統會使用提供的索引鍵資料欄映射來聯結這兩個資料集。若您只想檢查這些資料欄中的資料是否相等，則可提供其他資料欄映射。請注意，為了讓 **DataSetMatch** 順利運作，您的聯結索引鍵應是唯一的，且不得為 NULL (必須為主索引鍵)。如果不滿足這些條件，則會顯示以下錯誤訊息：「提供的索引鍵映射不適合指定的資料框架」。如果您無法擁有唯一的聯結索引鍵，請考慮使用其他規則類型 (例如 **AggregateMatch**) 來比對摘要資料。

**語法**

```
DatasetMatch <REFERENCE_DATASET_ALIAS> <JOIN CONDITION WITH MAPPING> <OPTIONAL_MATCH_COLUMN_MAPPINGS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS**：參考資料集的別名，用於比較來自主資料集的資料。
+ **KEY\$1COLUMN\$1MATION**：以逗號分隔的資料欄名稱清單，構成資料集中的索引鍵。如果兩個資料集中的資料欄名稱不相同，您必須使用 `->` 加以分隔
+ **OPTIONAL\$1MATCH\$1COLUMN\$1MAPPINGS**：如果您只想檢查某些資料欄中的資料是否相符，則可提供此參數。它使用與索引鍵資料欄映射相同的語法。如果未提供此參數，則會比對所有剩餘資料欄中的資料。其餘的非索引鍵資料欄在兩個資料集中必須具有相同的名稱。
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：使用 ID 資料欄比對集合資料集**

下列範例規則會使用 "ID" 資料欄聯結兩個資料集，檢查是否有 90% 以上的主資料集與參考資料集相符。該規則會比較這種情況下的所有資料欄。

```
DatasetMatch "reference" "ID" >= 0.9
```

**範例：使用多個索引鍵資料欄比對集合資料集**

在下列範例中，主資料集與參考資料集的索引鍵資料欄名稱各不相同。`ID_1` 和 `ID_2` 會在主資料集中共同形成一個複合索引鍵。`ID_ref1` 和 `ID_ref2` 會在參考資料集中共同形成一個複合索引鍵。在此情況下，您可使用特殊語法來提供資料欄名稱。

```
DatasetMatch "reference" "ID_1->ID_ref1,ID_2->ID_ref2" >= 0.9
```

**範例：使用多個索引鍵資料欄比對集合資料集，並檢查特定資料欄是否相符**

此範例建立在前面的範例之上。我們僅會檢查包含相符數量的資料欄。此資料欄在主資料集中名為 `Amount1`，在參考資料集中名為 `Amount2`。您想要取得完全相符的結果。

```
DatasetMatch "reference" "ID_1->ID_ref1,ID_2->ID_ref2" "Amount1->Amount2" >= 0.9
```

# DistinctValuesCount
<a name="dqdl-rule-types-DistinctValuesCount"></a>

根據指定運算式檢查欄中相異值的數目。

**語法**

```
DistinctValuesCount <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：相異欄值計數**

下列範例規則會檢查名為 `State` 的欄是否包含 3 個以上的相異值。

```
DistinctValuesCount "State" > 3
DistinctValuesCount "Customer_ID" < 6  where "Customer_ID < 10"
```

**動態規則範例**
+ `DistinctValuesCount "colA" between avg(last(10))-1 and avg(last(10))+1`
+ `DistinctValuesCount "colA" <= index(last(10),2) + std(last(5))`

# Entropy
<a name="dqdl-rule-types-Entropy"></a>

檢查欄的*熵*值是否符合指定的運算式。熵會測量訊息中包含的資訊層級。鑑於欄中值的概率分佈，熵描述了識別值所需的位元數。

**語法**

```
Entropy <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：欄熵**

下列範例規則會檢查名為 `Feedback` 的欄熵值是否大於一。

```
Entropy "Star_Rating" > 1
Entropy "First_Name" > 1  where "Customer_ID < 10"
```

 **動態規則範例** 
+ `Entropy "colA" < max(last(10))`
+ `Entropy "colA" between min(last(10)) and max(last(10))`

# IsComplete
<a name="dqdl-rule-types-IsComplete"></a>

檢查欄中的所有值是否完整 (非空)。

**語法**

```
IsComplete <COL_NAME>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型

**範例：空值**

下列範例會檢查名為 `email` 的欄中所有值是否為非空值。

```
IsComplete "email"
IsComplete "Email" where "Customer_ID between 1 and 50"
IsComplete "Customer_ID"  where "Customer_ID < 16 and Customer_ID != 12"
IsComplete "passenger_count" where "payment_type<>0"
```

**Null 行為**

 CSV 資料格式注意事項：CSV 資料欄上的空白資料列可以顯示多種行為。
+  如果資料欄是 `String` 類型，則空白資料列將辨識為空白字串，並且不會使 `Completeness` 規則失敗。
+  如果資料欄屬於其他資料類型 (例如 `Int`)，則空白資料列會辨識為 `NULL`，且會使 `Completeness` 規則失敗。

# IsPrimaryKey
<a name="dqdl-rule-types-IsPrimaryKey"></a>

檢查欄是否包含主索引鍵。如果欄中的所有值都是唯一且完整的 (非空)，則欄包含主索引鍵。您也可以檢查具有多個資料欄的主索引鍵。

**語法**

```
IsPrimaryKey <COL_NAME>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型

**範例：主索引鍵**

下列範例規則會檢查名為 `Customer_ID` 的欄是否包含主索引鍵。

```
IsPrimaryKey "Customer_ID"
IsPrimaryKey "Customer_ID" where "Customer_ID < 10"
```

 **範例：具有多個資料欄的主索引鍵。以下任意範例都有效。**

```
IsPrimaryKey "colA" "colB"
IsPrimaryKey "colA" "colB" "colC"
IsPrimaryKey colA "colB" "colC"
```

# IsUnique
<a name="dqdl-rule-types-IsUnique"></a>

檢查欄中的所有值是否是唯一的，並傳回布林值。

**語法**

```
IsUnique <COL_NAME>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型

**範例**

下列範例規則會檢查名為 `email` 的欄中所有值是否是唯一的。

```
IsUnique "email"
IsUnique "Customer_ID" where "Customer_ID < 10"]
```

下列範例規則會檢查多個資料欄。

```
IsUnique "vendorid" "tpep_pickup_datetime"
```

# Mean
<a name="dqdl-rule-types-Mean"></a>

檢查欄中所有值的平均值是否符合指定的運算式。

**語法**

```
Mean <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：平均值**

下列範例規則會檢查欄中所有值的平均值是否超過閾值。

```
Mean "Star_Rating" > 3
Mean "Salary" < 6200 where "Customer_ID < 10"
```

 **動態規則範例** 
+ `Mean "colA" > avg(last(10)) + std(last(2))`
+ `Mean "colA" between min(last(5)) - 1 and max(last(5)) + 1`

**Null 行為**

 `Mean` 規則會忽略計算平均值時值為 `NULL` 的資料列。例如：

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          |
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 資料欄 `units` 的平均值將為 (0 \$1 20 \$1 40) / 3 = 20。此計算不會考慮資料列 101 和 103。

# ReferentialIntegrity
<a name="dqdl-rule-types-ReferentialIntegrity"></a>

檢查主資料集中資料欄集值在多大程度上為參考資料集中資料欄集的值子集。

**語法**

```
ReferentialIntegrity <PRIMARY_COLS> <REFERENCE_DATASET_COLS> <EXPRESSION>
```
+ **PRIMARY\$1COLS**：主資料集中以逗號分隔的資料欄名稱清單。

  **支援的資料欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **REFERENCE\$1DATASET\$1COLS**：此參數包含以句號分隔的兩個部分。第一部分是參考資料集的別名。第二部分是在以大括號括住的參考資料集中以逗號分隔的資料欄名稱清單。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：檢查郵遞區號資料欄的參照完整性**

下列範例規則會檢查在主資料集的 `zipcode` 資料欄中，是否有超過 90% 的值存在於 `reference` 資料集的 `zipcode` 資料欄中。

```
ReferentialIntegrity "zipcode" "reference.zipcode" >= 0.9
```

**範例：檢查城市和州/省資料欄的參照完整性**

在下列範例中，包含城市和州/省資訊的資料欄存在於主資料集和參考資料集中。這兩個資料集中的資料欄名稱各不相同。該規則會檢查主資料集中的資料欄值集是否與參考資料集中的資料欄值集完全相等。

```
ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" = 1.0
```

 **動態規則範例** 
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" > avg(last(10))`
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" between min(last(10)) - 1 and max(last(10)) + 1`

# RowCount
<a name="dqdl-rule-types-RowCount"></a>

根據指定的運算式檢查資料集的列計數。在運算式中，您可以使用 `>` 和 `<` 之類的運算子指定列數或列的範圍。

**語法**

```
RowCount <EXPRESSION>
```
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：列計數數字檢查**

下列範例規則會檢查列計數是否在指定範圍內。

```
RowCount between 10 and 100
RowCount between 1 and 50 where "Customer_ID < 10"
```

 **動態規則範例** 

```
RowCount > avg(last(10)) *0.8
```

# RowCountMatch
<a name="dqdl-rule-types-RowCountMatch"></a>

根據指定的運算式，檢查主資料集資料欄計數與參考資料集資料列計數的比率。

**語法**

```
RowCountMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS**：比較資料列計數的參考資料集別名。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：針對參考資料集檢查資料列計數**

下列範例規則會檢查主資料集的資料列計數是否至少為參考資料集資料列計數的 90%。

```
RowCountMatch "reference" >= 0.9
```

# StandardDeviation
<a name="dqdl-rule-types-StandardDeviation"></a>

根據指定運算式檢查欄中所有值的標準差。

**語法**

```
StandardDeviation <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：標準差**

下列範例規則會檢查名為 `colA` 的欄中的值標準差是否小於指定值。

```
StandardDeviation "Star_Rating" < 1.5
StandardDeviation "Salary" < 3500 where "Customer_ID < 10"
```

 **動態規則範例** 
+ `StandardDeviation "colA" > avg(last(10) + 0.1`
+ `StandardDeviation "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Null 行為**

 `StandardDeviation` 規則會忽略計算標準差時值為 `NULL` 的資料列。例如：

```
+---+-----------+-----------+
|id |units1     |units2     |
+---+-----------+-----------+
|100|0          |0          |
|101|null       |0          |
|102|20         |20         |
|103|null       |0          |
|104|40         |40         |
+---+-----------+-----------+
```

 資料欄 `units1` 的標準差不會考慮資料列 101 和 103，且結果為 16.33。資料欄 `units2` 的標準差會產生 16。

# 總和
<a name="dqdl-rule-types-Sum"></a>

根據指定運算式檢查欄中所有值的總和。

**語法**

```
Sum <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：總和**

下列範例規則會檢查欄中所有值的總和是否超過指定的閾值。

```
Sum "transaction_total" > 500000
Sum "Salary" < 55600 where "Customer_ID < 10"
```

 **動態規則範例** 
+ `Sum "ColA" > avg(last(10))`
+ `Sum "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Null 行為**

 `Sum` 規則會忽略計算總和時值為 `NULL` 的資料列。例如：

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          |
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 資料欄 `units` 的總和不會考慮資料列 101 和 103，且結果為 (0 \$1 20 \$1 40) = 60。

# SchemaMatch
<a name="dqdl-rule-types-SchemaMatch"></a>

檢查主資料集的結構描述是否與參考資料集的結構描述相符。結構描述檢查會以逐個資料欄的形式完成。如果名稱與類型皆完全相同，表示兩個資料欄的結構描述相符。資料欄的順序無關緊要。

**語法**

```
SchemaMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS**：比較結構描述的參考資料集別名。

  **支援的欄類型**：位元組、小數、雙精度浮點數、浮點數、整數、長整數、短整數
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：SchemaMatch**

下列範例規則會檢查主資料集的結構描述是否與參考資料集的結構描述完全相符。

```
SchemaMatch "reference" = 1.0
```

# 唯一性
<a name="dqdl-rule-types-Uniqueness"></a>

根據指定運算式檢查欄中唯一值的百分比。唯一值正好出現一次。

**語法**

```
Uniqueness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱[表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例**

下列範例規則會檢查欄中唯一值的百分比是否符合特定數值條件。

```
Uniqueness "email" = 1.0
Uniqueness "Customer_ID" != 1.0 where "Customer_ID < 10"
```

下列範例規則會檢查多個資料欄。

```
Uniqueness "vendorid" "tpep_pickup_datetime" = 1
```

 **動態規則範例** 
+ `Uniqueness "colA" between min(last(10)) and max(last(10))`
+ `Uniqueness "colA" >= avg(last(10))`

# UniqueValueRatio
<a name="dqdl-rule-types-UniqueValueRatio"></a>

根據指定運算式檢查欄的*唯一值比率*。唯一值比率是唯一值數目除以欄中所有相異值數目的分數。唯一值正好出現一次，而相異值*至少*出現一次。

例如，集合 `[a, a, b]` 包含一個唯一值 (`b`) 和兩個相異值 (`a` 和 `b`)。所以集合的唯一值比率是 ½ = 0.5。

**語法**

```
UniqueValueRatio <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – 您要評估資料品質規則的欄名稱。

  **支援的欄類型**：任何欄類型
+ **EXPRESSION** – 針對規則類型回應執行的運算式，以產生布林值。如需詳細資訊，請參閱 [表達式](dqdl.md#dqdl-syntax-rule-expressions)。

**範例：唯一值比率**

此範例會根據值範圍來檢查資料欄的唯一值比率。

```
UniqueValueRatio "test_score" between 0 and 0.5
UniqueValueRatio "Customer_ID" between 0 and 0.9 where "Customer_ID < 10"
```

 **動態規則範例** 
+ `UniqueValueRatio "colA" > avg(last(10))`
+ `UniqueValueRatio "colA" <= index(last(10),2) + std(last(5))`

# DetectAnomalies
<a name="dqdl-rule-types-DetectAnomalies"></a>

 偵測所指定資料品質規則的異常。每次執行 DetectAnomalies 規則時，都會為指定規則儲存評估值。當收集到足夠的資料時，異常偵測演算法會擷取該指定規則的所有歷史資料，並執行異常偵測。偵測到異常時，DetectAnomalies 規則失敗。可以從觀察中獲得偵測到的異常的更多資訊。

**語法**

```
       DetectAnomalies <RULE_NAME> <RULE_PARAMETERS>
```

 `RULE_NAME`：您希望評估和偵測異常的規則名稱。支援的規則：
+ "RowCount"
+ "Completeness"
+ "Uniqueness"
+ "Mean"
+ "Sum"
+ "StandardDeviation"
+ "Entropy"
+ "DistinctValuesCount"
+ "UniqueValueRatio"
+ "ColumnLength"
+ "ColumnValues"
+ "ColumnCorrelation"
+ "CustomSQL"
+ "ColumnCount"

 `RULE_PARAMETERS`：某些規則需要其他參數才能執行。請參閱指定的規則文件查看所需的參數。

**範例：RowCount 的異常**

例如，如果我們想要偵測 RowCount 異常，則提供 RowCount 作為規則名稱。

```
DetectAnomalies "RowCount"
```

**範例：ColumnLength 的異常**

例如，如果我們想要偵測 ColumnLength 異常，則提供 ColumnLength 作為規則名稱和資料欄名稱。

```
DetectAnomalies "ColumnLength" "id"
```

# FileFreshness
<a name="dqdl-rule-types-FileFreshness"></a>

 FileFreshness 會根據您提供的條件，確保您的資料檔案是全新的。其使用您檔案的上次修改時間，來確保資料檔案或整個資料夾是最新的。

 此規則會收集兩個指標：
+ 根據您所設定規則的 FileFreshness 合規性
+ 規則掃描的檔案數目

```
{"Dataset.*.FileFreshness.Compliance":1,"Dataset.*.FileCount":1} 
```

 異常偵測不會考慮這些指標。

 **檢查檔案新鮮度** 

 下列規則可確保 tickets.parquet 在過去 24 小時內建立。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/tickets.parquet" > (now() - 24 hours)
```

 **檢查資料夾新鮮度** 

 如果資料夾中的所有檔案都在過去 24 小時內建立或修改，則下列規則會通過。

```
FileFreshness "s3://bucket/" >= (now() -1 days)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" >= (now() - 24 hours)
```

 **使用閾值檢查資料夾或檔案新鮮度** 

 如果資料夾 "tickets" 中有 10% 的檔案是在過去 10 天內建立或修改的，則下列規則會通過。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" < (now() - 10 days) with threshold > 0.1
```

 **檢查具有特定日期的檔案或資料夾** 

 您可以檢查特定日期的檔案新鮮度。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2020-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2023-01-01" and "2024-01-01"
```

 **使用時間檢查檔案或資料夾** 

 您可以使用 FileFreshness 來確保檔案已根據特定時間送達。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between now() and (now() - 45 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "9:30 PM"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > (now() - 10 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > now()
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 2 hours) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 3 days) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2001-02-07" and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45""
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2024-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "02:30" and "04:30"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "22:15"
```

 關鍵考量事項：
+  FileFreshness 可以使用天、小時及分鐘單位來評估檔案 
+  有時，其支援上午/下午和 24 小時 
+  除非指定覆寫，否則時間會以 UTC 計算 
+  日期按 UTC 時間 00:00 計算 

 以時間為基礎的 FileFreshness 運作方式如下：

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45"
```
+  首先，時間 "21:45" 會與 UTC 格式的今天日期合併，以建立日期時間欄位 
+  接下來，日期時間會轉換為您指定的時區 
+  最後，評估規則 

 **選用的以檔案為基礎的規則標籤：**

 標籤可讓您控制規則行為。

 **recentFiles** 

 此標籤會先保留最新的檔案，以限制處理的檔案數目。

```
FileFreshness "s3://amzn-s3-demo-bucket/" between (now() - 100 minutes) and (now() + 10 minutes) with recentFiles = 1
```

 **uriRegex** 

**注意**  
 此`uriRegex`標籤可在 AWS Glue 5.0 和更新版本中使用。

 此標籤透過將 regex 模式套用至檔案路徑來篩選檔案。只會處理路徑符合模式的檔案。您也可以使用負 lookahead 來排除符合模式的檔案。

```
# Match only files with a .csv extension
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "\.csv$"
# Match Parquet files that contain "orders_" in the path
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = ".*orders_.*\.parquet"
# Exclude files ending in .tmp using a negative lookahead
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注意**  
 此`filterOrder`標籤可在 AWS Glue 5.0 和更新版本中使用。

 當您同時使用多個篩選條件標籤，例如 `recentFiles`和 `uriRegex` 時，該`filterOrder`標籤會控制套用它們的順序。預設順序為 `recentFiles` ，然後是 `uriRegex`。

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with recentFiles = 1 with uriRegex = "inventory_" with filterOrder = ["uriRegex","recentFiles"]
```

 在上述範例中，會先套用`uriRegex`篩選條件，只選取符合 "inventory\$1" 的檔案，然後從該篩選集`recentFiles = 1`取得最新的檔案。如果沒有 `filterOrder`，預設行為會先採取單一最新檔案，然後套用 regex，如果最新檔案不符合模式，則可能會導致檔案不相符。

**注意**  
 `filterOrder` 清單中的所有值都必須參考相同規則上也存在的其他篩選條件標籤 (`recentFiles` 或 `uriRegex`)。非篩選條件標籤，例如 `timeZone`或 `failFast` 在 中無效`filterOrder`。

 **failFast** 

 設為 時`"true"`，規則會在第一個未通過更新條件的檔案上立即傳回失敗，而不是評估所有檔案並計算合規比率。

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with failFast = "true"
```

 **timeZone** 

 接受的時區覆寫，請參閱[允許的時區](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)以了解支援的時區。

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/New_York"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/Chicago"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Europe/Paris"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Asia/Shanghai"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Australia/Darwin"
```

 **直接從資料框推斷檔案名稱** 

 您不一定必須提供檔案路徑。例如，當您在 AWS Glue Data Catalog 中編寫規則時，可能很難找到目錄資料表正在使用的資料夾。 AWS Glue Data Quality 可以找到用來填入資料框架的特定資料夾或檔案，並可以偵測它們是否新鮮。

**注意**  
 此功能只有在檔案成功讀取到 DynamicFrame 或 DataFrame 時才有效。

```
FileFreshness > (now() - 24 hours)
```

 此規則會尋找用來填入動態框架或資料框的資料夾路徑或檔案。這適用於 Amazon S3 路徑或 Amazon S3 型 AWS Glue Data Catalog 資料表。有幾個考量：

1.  在 AWS Glue ETL 中，您必須在 Amazon S3 或 Glue Data Catalog 轉換後立即進行 **EvaluateDataQuality** AWS 轉換。  
![\[螢幕擷取畫面顯示連線至 Amazon S3 節點的評估資料品質節點。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-quality-file-freshness.png)

1.  此規則無法在 AWS Glue 互動式工作階段中運作。

 如果您在這兩種情況下嘗試這麼做，或 AWS Glue 找不到檔案時， AWS Glue 會擲回下列錯誤： `“Unable to parse file path from DataFrame”`

# FileMatch
<a name="dqdl-rule-types-FileMatch"></a>

 FileMatch 規則可讓您將檔案與其他檔案或檢查總和進行比較。這在幾個案例中很有用：

1.  驗證從外部來源收到的檔案：您可以使用 FileMatch，透過比較檢查總和來確保您已收到來自外部來源的正確檔案。這有助於驗證您正在擷取的資料的完整性。

1.  比較兩個不同資料夾中的資料：FileMatch 可用於比較兩個資料夾之間的檔案。

 此規則會收集一個指標：規則掃描的檔案數目。

```
{"Dataset.*.FileCount":1}
```

 **使用檢查總和驗證檔案：**

 FileMatch 接受檔案和一組檢查總和，以確保至少一個檢查總和與該檔案相符。

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"]
```

 支援下列標準演算法：
+ MD5
+ SHA-1
+ SHA-256

 如果您不提供演算法，則預設值為 SHA-256。

 **使用一組檢查總和驗證資料夾中的所有檔案：**

```
FileMatch "s3://amzn-s3-demo-bucket /" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket /internal-folder/" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"]
```

 **比較不同資料夾中的檔案** 

```
# Compare all files across two buckets
FileMatch "s3://original_bucket/" "s3://archive_bucket/"
# Compare files within specific subfolders
FileMatch "s3://original_bucket/internal-folder/" "s3://original_bucket/other-folder/"
# Compare only .json files across two folders
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with uriRegex = "\.json$"
# Compare only the 5 most recent .csv files
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 FileMatch 會檢查 `original_bucket` 中的檔案內容，並確保其符合 `archive_bucket` 中的內容。如果規則不完全相符，則規則將會失敗。其也可以檢查內部資料夾或個別檔案的內容。

 FileMatch 也可以互相檢查個別檔案。

```
FileMatch "s3://amzn-s3-demo-bucket /file_old.json" "s3://amzn-s3-demo-bucket /file_new.json"
```

 **直接從資料框推斷檔案名稱** 

 您不一定必須提供檔案路徑。例如，當您在 AWS Glue Data Catalog (Amazon S3 後端） 中編寫規則時，可能很難找到目錄資料表正在使用的資料夾。 AWS Glue Data Quality 可以找到用來填入資料框架的特定資料夾或檔案。

**注意**  
 此功能只有在檔案成功讀取到 DynamicFrame 或 DataFrame 時才有效。

```
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"]
```

 如果提供的檢查總和與計算結果不同，FileMatch 會提醒您差異。

![\[螢幕擷取畫面顯示 DQ 狀態為「規則失敗」的規則。FileMatch 說明失敗。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-quality-file-match.png)


 **選用的以檔案為基礎的規則標籤：**

 標籤可讓您控制規則行為。

 **recentFiles** 

 此標籤會先保留最新的檔案，以限制處理的檔案數目。

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1
```

 **uriRegex** 

**注意**  
 此`uriRegex`標籤可在 AWS Glue 5.0 和更新版本中使用。

 此標籤透過將 regex 模式套用至檔案路徑來篩選檔案。只會處理路徑符合模式的檔案。您也可以使用負 lookahead 來排除符合模式的檔案。

```
# Match only files with a .json extension
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "\.json$"
# Exclude files ending in .tmp using a negative lookahead
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注意**  
 此`filterOrder`標籤可在 AWS Glue 5.0 和更新版本中使用。

 當您同時使用多個篩選條件標籤，例如 `recentFiles`和 `uriRegex` 時，該`filterOrder`標籤會控制套用它們的順序。預設順序為 `recentFiles` ，然後是 `uriRegex`。

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1 with uriRegex = "\.json$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 此標籤可確保檔案沒有重複的名稱。預設行為為 false。

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac04179sam4713e5ef8f319"] with matchFileName = "true"
```

 有幾個考量：

1.  在 AWS Glue ETL 中，您必須在 Amazon S3 或 AWS Glue Data Catalog 轉換後立即進行 **EvaluateDataQuality** 轉換。  
![\[螢幕擷取畫面顯示 DQ 狀態為「規則失敗」的規則。FileMatch 說明失敗。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-quality-file-match-transform.png)

1.  此規則無法在 AWS Glue 互動式工作階段中運作。

# FileUniqueness
<a name="dqdl-rule-types-FileUniqueness"></a>

 檔案唯一性可讓您確保您從資料生產者收到的資料中沒有重複的檔案。

 其會收集下列資料統計資料：

1.  規則掃描的檔案數目 

1.  檔案的唯一性比率 

```
Dataset.*.FileUniquenessRatio: 1.00, Dataset.*.FileCount: 8.00
```

 **尋找資料夾中的重複檔案：**

```
FileUniqueness "s3://bucket/" > 0.5
FileUniqueness "s3://bucket/folder/" = 1
```

 **直接從資料框推斷資料夾名稱以偵測重複項目：**

 您不一定必須提供檔案路徑。例如，當您在 AWS Glue Data Catalog 中編寫規則時，可能很難找到目錄資料表正在使用的資料夾。 AWS Glue Data Quality 可以找到用來填入資料框架的特定資料夾或檔案。

**注意**  
 使用推論時，以檔案為基礎的規則只能偵測成功讀取到 DynamicFrame 或 DataFrame 的檔案。

```
FileUniqueness > 0.5
```

 **選用的以檔案為基礎的規則標籤：**

 標籤可讓您控制規則行為。

 **recentFiles** 

 此標籤會先保留最新的檔案，以限制處理的檔案數目。

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with recentFiles = 1
```

 **uriRegex** 

**注意**  
 此`uriRegex`標籤可在 AWS Glue 5.0 和更新版本中使用。

 此標籤透過將 regex 模式套用至檔案路徑來篩選檔案。只會處理路徑符合模式的檔案。您也可以使用負 lookahead 來排除符合模式的檔案。

```
# Match only files with a .csv extension
FileUniqueness "s3://bucket/" > 0.5 with uriRegex = "\.csv$"
# Exclude files ending in .tmp using a negative lookahead
FileUniqueness "s3://bucket/" > 0.5 with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注意**  
 此`filterOrder`標籤可在 AWS Glue 5.0 和更新版本中使用。

 當您同時使用多個篩選條件標籤，例如 `recentFiles`和 `uriRegex` 時，該`filterOrder`標籤會控制套用它們的順序。預設順序為 `recentFiles` ，然後是 `uriRegex`。

```
FileUniqueness "s3://bucket/" > 0.5 with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 此標籤可確保檔案沒有重複的名稱。預設行為為 false。

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with matchFileName = "true"
```

 有幾個考量：

1.  在 AWS Glue ETL 中，您必須在 Amazon S3 或 Glue Data Catalog 轉換後立即進行 **EvaluateDataQuality** AWS 轉換。

1.  此規則無法在 AWS Glue 互動式工作階段中運作。

# FileSize
<a name="dqdl-rule-types-FileSize"></a>

 FileSize 規則類型可讓您確保檔案符合特定的檔案大小條件。這適用於下列使用案例：

1.  確保生產者不會傳送空白或小得多的檔案進行處理。

1.  確保您的目標儲存貯體沒有較小的檔案，這可能會導致效能問題。

 FileSize 會收集下列指標：

1.  合規： 傳回符合您已建立的規則閾值的檔案百分比 

1.  檔案計數：規則掃描的檔案數目 

1.  檔案大小下限 (位元組) 

1.  檔案大小上限 (位元組) 

```
Dataset.*.FileSize.Compliance: 1.00, 
Dataset.*.FileCount: 8.00, 
Dataset.*.MaximumFileSize: 327413121.00, 
Dataset.*.MinimumFileSize: 204558920.00
```

 這些指標不支援異常偵測。

 **驗證檔案大小** 

 在 file.dat 大於 2 MB 時，此規則將通過。

```
FileSize "s3://amzn-s3-demo-bucket/file.dat" > 2 MB
```

 支援的單位包括 B (位元組)、MB (百萬位元組)、GB (十億位元組) 和 TB (兆位元組)。

 **驗證資料夾中檔案的大小** 

```
FileSize "s3://bucket/" > 5 B
FileSize "s3://bucket/" < 2 GB
```

 如果 s3://amzn-s3-demo-bucket 中的 70% 檔案介於 2 GB 與 1 TB 之間，則此規則將通過。

```
FileSize "s3://amzn-s3-demo-bucket/" between 2 GB and 1 TB  with threshold > 0.7
```

 **直接從資料框推斷檔案名稱** 

 您不一定必須提供檔案路徑。例如，當您在 Data Catalog 中編寫規則時，可能很難找到目錄資料表正在使用的資料夾。 AWS Glue Data Quality 可以找到用來填入資料框架的特定資料夾或檔案。

**注意**  
 此功能只有在檔案成功讀取到 DynamicFrame 或 DataFrame 時才有效。

```
FileSize < 10 MB with threshold > 0.7
```

 **選用的以檔案為基礎的規則標籤：**

 標籤可讓您控制規則行為。

 **recentFiles** 

 此標籤會先保留最新的檔案，以限制處理的檔案數目。

```
FileSize "s3://amzn-s3-demo-bucket/" > 5 B with recentFiles = 1
```

 **uriRegex** 

**注意**  
 此`uriRegex`標籤可在 AWS Glue 5.0 和更新版本中使用。

 此標籤透過將 regex 模式套用至檔案路徑來篩選檔案。只會處理路徑符合模式的檔案。您也可以使用負 lookahead 來排除符合模式的檔案。

```
# Match only files with a .dat extension
FileSize "s3://bucket/" > 5 B with uriRegex = "\.dat$"
# Exclude files ending in .tmp using a negative lookahead
FileSize "s3://bucket/" > 5 B with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注意**  
 此`filterOrder`標籤可在 AWS Glue 5.0 和更新版本中使用。

 當您同時使用多個篩選條件標籤，例如 `recentFiles`和 `uriRegex` 時，該`filterOrder`標籤會控制套用它們的順序。預設順序為 `recentFiles` ，然後是 `uriRegex`。

```
FileSize "s3://bucket/" > 5 B with recentFiles = 5 with uriRegex = "\.dat$" with filterOrder = ["uriRegex","recentFiles"]
```

 **failFast** 

 設為 時`"true"`，規則會在第一個未通過大小條件的檔案上立即傳回失敗，而不是評估所有檔案並計算合規比率。

```
FileSize "s3://bucket/" > 2 MB with failFast = "true"
```

 有幾個考量：

1.  在 AWS Glue ETL 中，您必須在 Amazon S3 或 Data Catalog 轉換後立即評估 DataQuality 轉換。

1.  此規則無法在 AWS Glue 互動式工作階段中運作。