

# Amazon Glue Data Quality for the Data Catalog 入门
<a name="data-quality-getting-started"></a>

 此  设置开始部分提供的说明有助于您在 Amazon Glue 控制台上开始使用 Amazon Glue Data Quality。您将学习如何完成基本任务，例如生成数据质量规则建议和根据您的数据评估规则集。

**Topics**
+ [先决条件](#data-quality-prereqs)
+ [分步示例](#data-quality-step-by-step-example)
+ [生成规则建议](#data-quality-get-recommendations)
+ [监控规则建议](#data-quality-monitor-recommendations)
+ [编辑推荐的规则集](#data-quality-edit-ruleset)
+ [创建新规则集](#data-quality-create-ruleset)
+ [运行规则集以评估数据质量](#data-quality-run-data-quality-task)
+ [查看数据质量分数和结果](#data-quality-view-results)
+ [使用预处理查询](#data-quality-preprocessing-queries)
+ [支持的源类型](#data-quality-get-started-supported-source-types)
+ [相关主题](#data-quality-get-started-related)

## 先决条件
<a name="data-quality-prereqs"></a>

 在 Amazon Glue Data Quality 使用之前，您应熟悉在 Amazon Glue 中使用 Data Catalog 和爬网程序。使用 Amazon Glue Data Quality，您可以评估 Data Catalog 数据库中表的质量。您需要以下项目：
+  Data Catalog 中的一个表，用于评估您的数据质量规则集。
+  Amazon Glue 的 IAM 角色，在生成规则建议或运行数据质量任务时提供。此角色必须具有运行各种 Amazon Glue Data Quality 进程所需的资源的访问权限。这些资源包括 Amazon Glue、Amazon S3 和 CloudWatch。要查看包含 Amazon Glue Data Quality 最低权限的策略示例，请参阅 [示例 IAM policies](data-quality-authorization.md#data-quality-authorization-example-policy)。

   要了解有关 Amazon Glue 的 IAM 角色的更多信息，请参阅 [Create an IAM policy for the Amazon Glue service](https://docs.amazonaws.cn/glue/latest/dg/create-service-policy.html) 和 [Create an IAM role for the Amazon Glue service](https://docs.amazonaws.cn/glue/latest/dg/create-an-iam-role.html)。您还可以查看 [Authorization for Amazon Glue Data Quality actions](https://docs.amazonaws.cn/glue/latest/dg/data-quality-authorization.html) 上特定于数据质量的所有 Amazon Glue 权限的列表。
+  至少有一个包含各种数据的表的数据库。本教程中使用的表名为 `yyz-tickets`，包含表 `tickets`。该数据是多伦多市政府提供的用于停车收费的公开信息的集合。如果您创建自己的表，请确保表中填充了各种有效数据，以获得最佳的推荐规则集。

## 分步示例
<a name="data-quality-step-by-step-example"></a>

 有关示例数据集的分步示例，请参阅 [AmazonGlue Data Quality 博客文章](https://www.amazonaws.cn/blogs/big-data/getting-started-with-aws-glue-data-quality-from-the-aws-glue-data-catalog/)。

## 生成规则建议
<a name="data-quality-get-recommendations"></a>

 规则建议使您无需编写代码即可轻松开始提高数据质量。使用 Amazon Glue Data Quality，您可以分析数据、确定规则并创建规则集，您可以在数据质量任务中对其进行评估。建议运行在 90 天后被自动删除。

**生成数据质量规则建议**

1.  打开 Amazon Glue 控制台，网址为 [https://console.aws.amazon.com/glue/](https://console.amazonaws.cn/glue/)。

1.  在导航窗格中，选择 **Tables**（表）。然后选择要为其生成数据质量规则建议的表。

1.  在表格详细信息页面上，选择**数据质量**选项卡以访问表的 Amazon Glue Data Quality 规则和设置。

1.  在**数据质量**选项卡上，选择**添加规则并监控数据质量**。

1.  在**规则集生成器**页面上，如果没有规则建议运行，页面顶部的警报将提示您启动建议任务。

1.  选择**推荐规则**以打开模态并输入建议任务的参数。

1.  选择一个有权访问 Amazon Glue 的 IAM 角色。此角色必须具有运行各种 Amazon Glue Data Quality 进程所需的资源的访问权限。

1.  根据您的偏好填写字段后，选择**推荐规则**以开始运行建议任务。如果建议运行正在进行或已完成，则可以在此警报中管理您的运行。您可能需要刷新警报才能查看状态更改。已完成和正在进行的建议任务运行显示在**运行历史记录**页面中，该页面列出了过去 90 天的所有建议运行。

### 推荐的规则是什么意思
<a name="data-quality-recommend-rules"></a>

 Amazon Glue Data Quality 根据输入表中每列的数据生成规则。它使用这些规则来确定可以筛选数据以保持质量要求的潜在界限。以下生成的规则列表包括一些示例，这些示例有助于理解这些规则的含义以及它们在应用于您的数据时可能做什么。

 有关生成的数据质量定义语言（DQDL）规则类型的完整列表，请参阅 [DQDL rule type reference](https://docs.amazonaws.cn/glue/latest/dg/dqdl.html#dqdl-rule-types)。
+  `IsComplete "SET_FINE_AMOUNT"` - `IsComplete` 规则验证是否为任何给定行填写了该列。使用此规则在数据中将列标记为非可选列。
+  `Uniqueness "TICKET_NUMBER" > 0.95` - `Uniqueness` 规则验证列中的数据是否满足某个唯一性阈值。在本例中，确定为 `"TICKET_NUMBER"` 填充任何给定行的数据的内容与所有其他行的内容最多 95% 相同，这表明了这一规则。
+  `ColumnValues "PROVINCE" in ["ON", "QC", "AB", "NY",...]` - `ColumnValues` 规则根据现有列内容定义列的有效值。在本例中，每行的数据是州或省的 2 个字母的牌照。
+  `ColumnLength "INFRACTION_DESCRIPTION" between 15 and 31` - `ColumnLength` 规则对列的数据强制执行长度限制。此规则是根据样本数据生成的，该数据基于一列字符串的最小和最大记录长度。

## 监控规则建议
<a name="data-quality-monitor-recommendations"></a>

 运行数据质量规则建议时，**添加规则并监控数据质量**页面会在顶部栏中显示您可以执行的信息和其他操作。

 当规则建议正在进行时，您可以在建议任务完成之前选择**停止运行**。任务正在进行时，您将看到运行的状态**进行中**以及运行开始的日期和时间。

 规则建议完成后，规则建议栏会显示建议的规则数量、上次建议运行的状态以及完成的日期和时间戳。

 您可以通过选择**插入规则建议**来添加推荐的规则。要查看之前推荐的规则，请选择一个特定的日期。要运行新的建议，请选择**更多操作**，然后选择**推荐的规则**。

 通过选择**管理用户设置**来设置默认设置。您可以为 Amazon S3 设置默认路径，来存储规则集或设置运行 Data Catalog 的默认角色。

## 编辑推荐的规则集
<a name="data-quality-edit-ruleset"></a>

由于 Amazon Glue Data Quality 会根据您现有的可用数据生成规则，因此您可能会在自动建议中看到一些意想不到或不想要的规则。为了充分利用推荐的规则集，您需要对其进行评估和修改。在本教程的这一步中，您将采用上一步中生成的规则并对其进行调整，以对某些数据强制执行更严格的质量。您还可以放宽其他规则，以确保以后可以添加正确、唯一的数据。

**编辑建议的规则集**

1.  在 Amazon Glue 控制台中的导航窗格中，选择 **Data Catalog**，然后选择**数据库表**。选择 `tickets` 表。

1. 在表格详细信息页面上，选择**数据质量**选项卡以访问表的 Amazon Glue Data Quality 规则和设置。

1.  在**规则集**部分，选择在 [生成规则建议](#data-quality-get-recommendations) 中生成的规则集。

1.  选择**操作**，然后在控制台窗口中选择**编辑**。规则集编辑器加载到控制台中。它包括规则的编辑窗格和 DQDL 的快速参考。

1. 删除脚本中的 `2` 行。这放宽了将数据库大小限制在一定行数之内的要求。编辑完成后，您的文件应在第 1-3 行包含以下内容：

   ```
   Rules = [
       IsComplete "TAG_NUMBER_MASKED",
       ColumnLength "TAG_NUMBER_MASKED" between 6 and 9,
   ```

1. 删除脚本中的 `25` 行。这放宽了记录在案的省份中占 96% 的要求为 `ON`。编辑完成后，您的文件应包含从行 `24` 到规则集末尾的以下内容：

   ```
   ColumnValues "PROVINCE" in ["ON", "QC", "AB", "NY", "AZ", "NS", "BC", "MI", "PQ", "MB", "PA", "FL", "SK", "NJ", "OH", "NB", "IL", "MA", "CA",
       "VA", "TX", "NF", "MD", "PE", "CT", "NC", "GA", "IN", "OR", "MN", "TN", "WI", "KY", "MO", "WA", "NH", "SC", "CO", "OK", "VT", "RI", "ME", "AL",
       "YT", "IA", "DE", "AR", "LA", "XX", "WV", "MT", "KS", "NT", "DC", "NV", "NE", "UT", "MS", "NM", "ID", "SD", "ND", "AK", "NU", "GO", "WY", "HI"],
   ColumnLength "PROVINCE" = 2
   ]
   ```

1. 将行`14` 更改为以下内容：

   ```
   IsComplete "TIME_OF_INFRACTION",
   ```

    通过将数据库限制为仅包含记录的违规时间的工单，这*加强*了对列的要求。在此数据集中，您应始终将没有记录违规时间的工单视为无效数据。这与分区或转换可能更适合进一步使用或检查数据以确定质量规则的情况不同。

1. 选择控制台页面底部的**更新规则集**。

## 创建新规则集
<a name="data-quality-create-ruleset"></a>

 规则集是一组数据质量规则，您可以根据数据进行评估。在 Amazon Glue 控制台中，您可以使用数据质量定义语言（DQDL）创作自定义规则集。

**创建数据质量规则集**

1.  在 Amazon Glue 控制台中的导航窗格中，选择 **Data Catalog**，选择**数据库**，然后选择**表**。选择表 `tickets`。

1. 打开 **Data quality**（数据质量）选项卡。

1.  在**规则集**部分中，选择**创建规则集**。DQDL 编辑器将在控制台中启动。它有一个用于直接编辑的文本区域，还有用于 DQDL 规则和表架构的快速参考。

1.  开始向 DQDL 编辑器的文本区域添加规则。您可以直接从本教程中编写规则，也可以使用数据质量规则编辑器的 **DQDL 规则生成器**功能。
**注意**  
 从列表中选择规则类型，然后选择加号将示例语法插入编辑器窗格。
将占位符列名与您自己的列名交换。表中的列名可在**架构**选项卡中找到。
 根据需要更新表达式参数。有关 DQDL 支持的表达式的完整列表，请参阅[Expressions](dqdl.md#dqdl-syntax-rule-expressions)。

    例如，以下规则是对 `tickets` 表中 `ticket_number` 列进行数据验证的约束。要添加以下规则，请使用 DQDL 规则生成器或直接编辑您的规则集：

   ```
   IsComplete "ticket_number",
   IsUnique "ticket_number",
   ColumnValues "ticket_number" > 9000000000
   ```

1. 在**规则集名称**字段中为您的新规则集提供一个名称。

1. 选择**保存规则集**。

### 评估多个数据集的数据质量
<a name="data-quality-create-ruleset-referential-integrity"></a>

 您可以使用 ReferentialIntegrity 和 DatasetMatch 规则集跨多个数据集设置数据质量规则。ReferentialIntegrity 会检查主数据集中的数据是否存在于其他数据集中。

要添加引用数据集，请选择**架构**选项卡，然后选择**更新引用表**。系统将提示您选择数据库和表。您可以添加表，然后设置数据质量规则。AggregateMatch、RowCountMatch、ReferentialIntegrity、SchemaMatch 和 DatasetMatch 等规则类型支持对多个数据集执行数据质量检查的功能。

## 运行规则集以评估数据质量
<a name="data-quality-run-data-quality-task"></a>

 当您运行数据质量任务时，Amazon Glue Data Quality 会根据您的数据评估规则集并计算数据质量分数。此分数代表通过输入的数据质量规则的百分比。

**运行数据质量任务**

1. 在 Amazon Glue 控制台中的导航窗格中，选择 **Data Catalog**，选择**数据库**，然后选择**表**。选择表 `tickets`。

1. 选择**数据质量**选项卡。

1. 在**规则集**列表中，选择要对照表评估的规则集。在此步骤中，我们建议使用您已经编写或修改过的规则集，而不是生成的规则。选择**运行**。

1.  在模态中，选择您的 IAM 角色。此角色必须具有运行各种 Amazon Glue Data Quality 进程所需的资源的访问权限。您可以将 IAM 角色保存为默认角色，也可以前往**默认设置**页面对其进行修改。

1.  在 **Data quality actions**（数据质量操作）下，选择是否要 **Publish metrics to Amazon CloudWatch**（将指标发布到 Amazon CloudWatch）。选择此选项后，Amazon Glue Data Quality 会发布指标，指示通过的规则数量和失败的规则数量。要对以这种方式存储的指标采取行动，您可以使用 CloudWatch 警报。系统还会将关键指标发布到 Amazon EventBridge 供您设置警报。有关更多信息，请参阅 [Setting up alerts, deployments, and scheduling](https://docs.amazonaws.cn/glue/latest/dg/data-quality-alerts.html)。

1.  在**运行频率**中，选择按需运行或计划规则集。计划规则集时，系统会提示您输入任务名称。计划将在 Amazon EventBridge 中创建。您可以在 Amazon EventBridge 中编辑计划。

1.  要在 Amazon S3 中保存数据质量结果，请选择**数据质量结果位置**。您之前为此任务选择的 IAM 角色必须具有您选择的位置的写入权限。

1.  在**其他配置**下，输入您希望 Amazon Glue 为数据质量任务分配的**请求的工作线程数**。

1.  您可以选择在数据来源上设置筛选器。这可以帮助减少要读取的数据。您还可以使用筛选器来运行增量验证，方法是选择分区信息并通过 API 调用将其作为参数传递。为了提高性能，您可以提供分区谓词。

1.  选择**运行**。您应该在 **Data quality task runs**（数据质量任务运行）列表中看到您的新任务。当任务的**运行状态**列显示为**已完成**时，您可以查看质量分数结果。您可能需要刷新控制台窗口才能正确更新状态。

1.  要查看数据质量结果详细信息的列，请选择“\+”图标展开规则集。结果显示了在评估中通过和失败的规则，以及触发规则失败的原因。

## 查看数据质量分数和结果
<a name="data-quality-view-results"></a>

**查看所有已创建的规则集的最新运行情况**

1.  在 Amazon Glue 控制台中，选择 **Tables**（表）。然后选择要为其运行数据质量任务的表。

1.  选择**数据质量**选项卡。

1.  **数据质量快照**显示了一段时间内运行的总体趋势。默认情况下，系统会显示所有规则集的最近 10 次运行。要按规则集进行筛选，请从下拉列表中选择所需的规则集。如果运行次数少于 10 次，则会显示所有已完成的可用运行。

1.  在**数据质量**表中，系统显示了每个规则集及其最新运行次数（如果有的话）以及分数。展开规则集会显示该规则集中的规则以及该运行的规则结果。



**查看特定规则集的最新运行情况**

1.  在 Amazon Glue 控制台中，选择 **Tables**（表）。然后选择要为其运行数据质量任务的表。

1.  选择**数据质量**选项卡。

1.  在**数据质量**表中，选择特定的规则集。

1.  在**规则集详细信息**页面上，选择**运行历史记录**选项卡。

    该特定规则集的所有评估运行都列在该选项卡的表格中。您可以查看分数历史记录和运行状态。

1.  要查看有关特定运行的更多信息，请选择**运行 ID** 以转到**评估运行详细信息**页面。在此页面上，您可以看到有关运行的详细信息以及有关各个规则结果状态的更多详细信息。

## 使用预处理查询
<a name="data-quality-preprocessing-queries"></a>

 Amazon Glue 数据质量自动监测功能支持预处理查询，允许在运行数据质量检查之前转换数据。通过该功能，可以：
+ 创建数据质量验证的派生列。
+ 根据特定条件筛选数据。
+ 为质量检查执行计算或转换。
+ 验证各列之间的关系。

**注意**  
 此功能仅在 API 中受支持，通过控制台不受支持。

### 通过 CLI 和 SDK 使用预处理查询
<a name="data-quality-preprocessing-queries-cli-sdk"></a>

#### 建议运行
<a name="data-quality-preprocessing-queries-recommendation-runs"></a>

 以下示例演示了如何通过建议运行使用预处理查询。

 **Amazon CLI：**

```
aws glue start-data-quality-rule-recommendation-run \
  --data-source '{"DataQualityGlueTable": { \
    "DatabaseName": "mydatabase", \
    "TableName": "mytable", \
    "PreProcessingQuery": "SELECT sepal_length, sepal_width, petal_length, petal_width, class, (sepal_length + sepal_width) as sepal_total FROM `mydatabase.mytable`" \
  }}' \
  --role "arn:aws:iam::123456789012:role/GlueDataQualityRole" \
  --created-ruleset-name "my-ruleset-with-preprocessing"
```

 **Java SDK：**

```
StartDataQualityRuleRecommendationRunRequest request = new StartDataQualityRuleRecommendationRunRequest()
    .withDataSource(new DataSource()
        .withDataQualityGlueTable(new DataQualityGlueTable()
            .withDatabaseName("mydatabase")
            .withTableName("mytable")
            .withPreProcessingQuery("SELECT sepal_length, sepal_width, " + 
                "(sepal_length + sepal_width) as sepal_total " +
                "FROM `mydatabase.mytable`")))
    .withRole("arn:aws:iam::123456789012:role/GlueDataQualityRole")
    .withCreatedRulesetName("my-ruleset-with-preprocessing");

glueClient.startDataQualityRuleRecommendationRun(request);
```

#### 规则集评估运行
<a name="data-quality-preprocessing-queries-evaluation-runs"></a>

 以下示例演示了如何通过规则集评估运行使用预处理查询。

 **Amazon CLI：**

```
aws glue start-data-quality-ruleset-evaluation-run \
  --data-source '{"DataQualityGlueTable": { \
    "DatabaseName": "mydatabase", \
    "TableName": "mytable", \
    "PreProcessingQuery": "SELECT order_id, amount, (tax + shipping) as total_fees FROM `mydatabase.mytable`" \
  }}' \
  --role "arn:aws:iam::123456789012:role/GlueDataQualityRole" \
  --ruleset-names '["my-ruleset"]'
```

 **Java SDK：**

```
StartDataQualityRulesetEvaluationRunRequest request = new StartDataQualityRulesetEvaluationRunRequest()
    .withDataSource(new DataSource()
        .withDataQualityGlueTable(new DataQualityGlueTable()
            .withDatabaseName("mydatabase")
            .withTableName("mytable")
            .withPreProcessingQuery("SELECT order_id, amount, " +
                "(tax + shipping) as total_fees " +
                "FROM `mydatabase.mytable`")))
    .withRole("arn:aws:iam::123456789012:role/GlueDataQualityRole")
    .withRulesetNames(Arrays.asList("my-ruleset"));

glueClient.startDataQualityRulesetEvaluationRun(request);
```

### 创作预处理查询时的注意事项
<a name="data-quality-preprocessing-queries-considerations"></a>

 在编写预处理查询时：
+ 表引用的格式必须为使用反引号的 ``databaseName.tableName``。
+ 该查询必须是有效的 SELECT 语句。
+ 查询输出中的列名将用于数据质量规则。

 以下示例演示了一个预处理查询：

```
SELECT 
    sepal_length, 
    sepal_width, 
    petal_length, 
    petal_width, 
    class,
    (sepal_length + sepal_width) as sepal_total 
FROM `mydatabase.mytable`
```

### 限制
<a name="data-quality-preprocessing-queries-limitations"></a>
+ 查询必须使用反引号和完整 ``databaseName.tableName`` 格式来引用表。
+ 查询最大长度为 51,200 个字符。
+ 该查询必须返回至少一行数据。
+ 规则集中引用的所有列都必须出现在查询输出中。

## 支持的源类型
<a name="data-quality-get-started-supported-source-types"></a>


**按 Amazon Lake Formation 配置划分的表类型支持**  

| 表类型 | Amazon Lake Formation：所有表访问权限 | Amazon Lake Formation 列级权限启用 | Amazon Lake Formation 数据筛选权限启用 | 跨账户 Amazon Lake Formation 支持：所有表访问权限 | Amazon Lake Formation 已禁用 | 
| --- | --- | --- | --- | --- | --- | 
| Parquet | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| ORC | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| CSV、JSON、TSV | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| Avro | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| JSON | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| Iceberg | 支持 | 不支持 | 不支持 | 支持 | 支持 | 
| HUDI | 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 
| Delta | 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 
| RMS | 支持\* | 支持\* | 支持\* | 不支持 | 不支持 | 
| Amazon S3 表 | 支持\* | 不支持 | 不支持 | 不适用 | 支持 | 
| Amazon RDS 和 Aurora | 不适用 | 不适用 | 不适用 | 不适用 | 不支持 | 
| JDBC | 不适用 | 不适用 | 不适用 | 不适用 | 支持 | 

 \*Amazon Glue 控制台目前不支持 Amazon S3 表和 SageMaker Lakehouse。目前，仅通过 CLI 支持 Amazon S3 表及 SageMaker Lakehouse Data Catalog 建议运行和 Data Catalog 数据质量评估运行。

### 其他已知限制条件
<a name="w2aac49c43c47b7"></a>
+  Delta Lake Symlink 表：不支持 Amazon Glue 数据质量自动监测功能建议运行或 Data Catalog 数据质量评估运行。
+  在 SageMaker Unified Studio 中发布 Amazon S3 表资产：目前，无法在 SageMaker Unified Studio 中将 Amazon S3 表作为资产发布；因此，SageMaker Unified Studio 无法可视化 Amazon S3 表数据质量运行结果。

## 相关主题
<a name="data-quality-get-started-related"></a>
+ [DL 规则类型引用](dqdl-rule-types.md)
+ [数据质量定义语言（DQDL）引用](dqdl.md)