

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用高级规则类型创建基于规则的匹配工作流
<a name="rule-based-mw-advanced"></a>

**先决条件**

在创建基于规则的匹配工作流程之前，您必须：

1. 创建架构映射。有关更多信息，请参阅 [创建架构映射](create-schema-mapping.md)。

1. 如果使用 Connect 客户档案作为输出目标，请确保配置了相应的权限。

以下过程演示如何使用 AWS Entity Resolution 数据匹配服务 控制台或 API 创建具有**高级**规则类型的基于规则的匹配工作流。`CreateMatchingWorkflow`

------
#### [ Console ]

**使用创建基于规则的匹配工作流程 **高级** 使用控制台的规则类型**

1. 登录 AWS 管理控制台 并打开 AWS Entity Resolution 数据匹配服务 控制台，网址为[https://console.aws.amazon.com/entityresolution/](https://console.aws.amazon.com/entityresolution/)。

1. 在左侧导航窗格的 “**工作流程**” 下，选择 “**匹配**”。

1. 在**匹配工作流程**页面的右上角，选择**创建匹配工作流程**。

1. 对于 “**步骤 1：指定匹配的工作流程详细信息**”，请执行以下操作：

   1. 输入**匹配的工作流程名称**和可选的**描述**。

   1. 对于**数据输入 **AWS 区域****，选择**AWS Glue 数据库**、**AWS Glue 表**，然后选择相应的**架构映射**。

      您最多可以添加 19 个数据输入。
**注意**  
要使用**高级**规则，您的架构映射必须满足以下要求：  
除非字段组合在一起，否则每个输入字段都必须映射到唯一的匹配键。
如果将输入字段组合在一起，则它们可以共享相同的匹配键。  
例如，以下架构映射对**高级**规则有效：  
`firstName: { matchKey: 'name', groupName: 'name' }`  
`lastName: { matchKey: 'name', groupName: 'name' }`  
在这种情况下，`firstName`和`lastName`字段组合在一起并共享相同的名称匹配密钥，这是允许的。  
**检查您的架构映射并更新它们以遵循此一对一匹配规则，除非字段已正确分组，否则才能使用高级规则。**
如果您的数据表有 DELETE 列，则架构映射的类型必须为，`String`并且不能使用`matchKey`和`groupName`。

   1. 默认情况下，“**标准化数据**” 选项处于选中状态，以便在匹配之前对数据输入进行标准化。如果您不想对数据进行标准化处理，请取消选择 “**标准化**数据” 选项。
**注意**  
**创建架构映射**中仅支持以下场景的标准化：  
如果将以下 “**名称**” 子类型分组：**名字**、**中间名、姓****氏**。
如果将以下**地址**子类型分组：**街道地址 1**、**街道地址 2**、**街道地址 3**、**城市**、**州**、**国家**、**邮政编码**。
如果将以下**电话**子类型分组：**电话号码**、**电话国家/地区代码**。

   1. 要指定**服务访问**权限，请选择一个选项并采取建议的操作。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/entityresolution/latest/userguide/rule-based-mw-advanced.html)

   1. （可选）要为资源启用**标签**，请选择**添加新标签**，然后输入**密钥**和**值**对。

   1. 选择**下一步**。

1. 对于**步骤 2：选择匹配技术**：

   1. 在 “**匹配方法**” 中，选择**Rule-based匹配**。

   1. 对于 “**规则类型**”，选择 “**高级**”。  
![选择匹配技术屏幕，并选择基于规则的高级匹配选项。](http://docs.aws.amazon.com/zh_cn/entityresolution/latest/userguide/images/choose-matching-method-rule-based-advanced.PNG)

   1. 在 “**处理节奏**” 中，选择以下选项之一。
      + 选择 “**手动**”，按需运行工作流以进行批量更新 
      + 选择 “**自动**” 以在 S3 存储桶中有新数据后立即运行工作流程 
**注意**  
如果您选择 “**自动**”，请确保您的 S3 存储桶已启用 Amazon EventBridge 通知。有关 EventBridge 使用 S3 控制台启用亚马逊的说明，请参阅 [Amazon S3 用户指南 EventBridge中的启用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-event-notifications-eventbridge.html)*亚马逊*。

   1. 对于**匹配规则**，输入**规则名称**，然后根据您的目标从下拉列表中选择相应的匹配函数和运算符来构建**规则条件**。

      您最多可以创建 25 条规则。
**注意**  
AWS Entity Resolution 数据匹配服务 还支持[传递匹配](transitive-matching.md)，它可以处理所有规则级别的记录，以传递方式连接匹配组。传递匹配作为一项 API-only 功能提供。启用传递匹配后，不支持 **EmptyValues=Ignore** 修饰符。有关更多信息，请参阅 [使用传递匹配](transitive-matching.md)。

      ****必须使用 AND 运算符将模糊匹配函数（**Cosine**、**Levenshtein** 或 **Soundex**）与精确匹配函数（Exact、**ExactManyToMany**）组合在一起。****

      根据您的目标，您可以使用下表来帮助决定要使用哪种类型的函数或运算符。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/entityresolution/latest/userguide/rule-based-mw-advanced.html)  
**Example 与电话号码和电子邮件相匹配的规则条件**  

      以下是匹配电话号码（**电话**匹配密钥）和电子邮件地址（**电子邮件地址**匹配密钥）记录的规则条件示例：

      `Exact(Phone,EmptyValues=Process) AND Levenshtein("Email address",2)`  
![匹配电话号码和电子邮件地址记录的规则条件示例。](http://docs.aws.amazon.com/zh_cn/entityresolution/latest/userguide/images/matching-rule-condition-example.png)

      **电话**匹配键使用**精确**匹配功能来匹配相同的字符串。**电话**匹配键使用 **EmptyValues=Process 修饰符处理**匹配中的空值。

      **电子邮件地址**匹配键使用 **Levenshtein** 匹配功能使用默认的 Levenshtein 距离算法阈值 2 来匹配拼写错误的数据。**电子邮件**匹配键不使用任何可选修饰符。

      **AND 运算符结合了**精确**匹配函数和 **Levenshtein** 匹配函数。**  
**Example 用于执行火柴键匹配 ExactManyToMany 的规则条件**  

      以下是一个规则条件示例，该规则条件用于匹配三个地址字段（**HomeAddress**匹配键、**BillingAddress**匹配键和**ShippingAddress**匹配键）上的记录，通过检查其中是否有相同值来查找潜在的匹配项。

      `ExactManyToMany`运算符会评估指定地址字段的所有可能组合，以确定任意两个或多个地址之间的精确匹配项。例如，它将检测是否与或`HomeAddress`匹配`ShippingAddress`，`BillingAddress`或者所有三个地址是否完全匹配。

      ```
      ExactManyToMany(HomeAddress, BillingAddress, ShippingAddress)
      ```  
**Example 使用聚类的规则条件**  

      在具有模糊条件的基于规则的高级匹配中，系统首先根据精确匹配将记录分组为聚类。形成这些初始聚类后，系统会应用模糊匹配过滤器来识别每个聚类中的其他匹配项。为了获得最佳性能，您应该根据自己的数据模式选择精确匹配条件来创建定义明确的初始群集。

      以下是将多个精确匹配与模糊匹配要求相结合的规则条件示例。它使用`AND`运算符来检查三个字段 — `FullName`、出生日期 (`DOB`) 和 `Address` — 在记录之间是否完全匹配。使用 Levenshtein 的距离，它还允许在`InternalID`场上进行细微的变化。`1`Levenshtein 距离测量将一个字符串更改为另一个字符串所需的最小单字符编辑次数。距离为 1 表示它将匹配仅`InternalIDs`相差一个字符（例如单个错字、删除或插入）。这种条件组合有助于识别极有可能代表同一实体的记录，即使标识符之间存在细微差异。

      ```
      Exact(FullName) AND Exact(DOB) AND Exact(Address) and Levenshtein(InternalID, 1)
      ```

   1. 选择**下一步**。

1. 对于**步骤 3：指定数据输出和格式**：

   1. 对于**数据输出目标和格式**，选择数据输出的 **Amazon S3 位置**，以及**数据格式**是**标准化数据**还是**原始数据**。

   1. 对于**加密**，如果您选择**自定义加密设置**，请输入**AWS KMS 密钥** ARN。

   1. 查看**系统生成的输出**。

   1. 对于**数据输出**，请决定要包含、隐藏或掩盖哪些字段，然后根据目标采取建议的操作。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/entityresolution/latest/userguide/rule-based-mw-advanced.html)

   1. 选择**下一步**。

1. 对于**步骤 4：查看并创建**：

   1. 查看您在之前的步骤中所做的选择，并在必要时进行编辑。

   1. 选择**创建并运行**。

      将出现一条消息，表示匹配的工作流程已创建且作业已启动。

1. 在匹配的工作流程详细信息页面的**指标**选项卡上，在 “**上次作业指标**” 下查看以下内容：
   + 作**业 ID**。
   + **匹配工作流作业的**状态**：已**排队**、进行**中**、**已完成、失**败** 
   + 工作流作业的**完成时间**。
   + 已**处理的记录**数。
   + **未处理的记录**数。
   + **生成的唯一匹配 ID**。
   + **输入记录**的数量。

   您还可以查看任务**历史记录下先前运行过的匹配工作流程作业的作业**指标。

1. 匹配的工作流程任务完成（**状态**为**已完成**）后，您可以转到**数据输出**选项卡，然后选择您的 **Amazon S3 位置**以查看结果。

1. （仅限**手动**处理类型）如果您创建了与 “**手动**” 处理类型的**Rule-based 匹配**工作流，则可以在匹配的工作流程详细信息页面上选择 “**运行工作**流”，随时运行匹配的工作流。

1. （仅限**自动**处理类型）如果您的数据表有 DELETE 列，则：
   + 删除列{{true}}中设置为的记录。
   + 在 “删除” 列{{false}}中设置为的记录将提取到 S3 中。

   有关更多信息，请参阅 [步骤 1：准备第一方数据表](prepare-input-data.md#prepare-first-party-tables)。

------
#### [ API ]

**使用创建基于规则的匹配工作流程 **高级** 使用 API 的规则类型**
**注意**  
默认情况下，工作流使用标准（批处理）处理。要使用增量（自动）处理，必须对其进行明确配置。

1. 打开终端或命令提示符发出 API 请求。

1. 向以下端点创建 POST 请求：

   ```
   /matchingworkflows
   ```

1. 在请求标头中，将设置 Content-type 为 application/json。
**注意**  
有关支持的编程语言的完整列表，请参阅 *[AWS Entity Resolution 数据匹配服务 API 参考](https://docs.aws.amazon.com/entityresolution/latest/apireference/Welcome.html)*。

1. 对于请求正文，请提供以下必需的 JSON 参数：

   ```
   {
      "description": "{{string}}",
      "incrementalRunConfig": { 
         "incrementalRunType": "{{string}}"
      },
      "inputSourceConfig": [ 
         { 
            "applyNormalization": {{boolean}},
            "inputSourceARN": "{{string}}",
            "schemaName": "{{string}}"
         }
      ],
      "outputSourceConfig": [ 
         { 
            "applyNormalization": {{boolean}},
            "KMSArn": "{{string}}",
            "output": [ 
               { 
                  "hashed": boolean,
                  "name": "{{string}}"
               }
            ],
            "outputS3Path": "{{string}}"
         }
      ],
      "resolutionTechniques": { 
         "providerProperties": { 
            "intermediateSourceConfiguration": { 
               "intermediateS3Path": "{{string}}"
            },
            "providerConfiguration": {{JSON value}},
            "providerServiceArn": "{{string}}"
         },
         "resolutionType": "RULE_MATCHING",
         "ruleBasedProperties": { 
            "attributeMatchingModel": "{{string}}",
            "matchPurpose": "{{string}}",
            "rules": [ 
               { 
                  "matchingKeys": [ "{{string}}" ],
                  "ruleName": "{{string}}"
               }
            ]
         },
         "ruleConditionProperties": { 
            "rules": [ 
               { 
                  "condition": "{{string}}",
                  "ruleName": "{{string}}"
               }
            ]
         }
      },
      "roleArn": "{{string}}",
      "tags": { 
         "string" : "{{string}}" 
      },
      "workflowName": "{{{{string}}}}"
   }
   ```

   其中：
   + `workflowName`（必填）— 必须是唯一的，并且必须介于 1—255 个字符之间，匹配模式 [a-z A-Z \_0-9-] \*
   + `inputSourceConfig`（必填）— 1—20 个输入源配置列表
   + `outputSourceConfig`（必填）— 只有一个输出源配置
   + `resolutionTechniques`（必填）— 设置为 “RULE\_MATCHING” 作为基于规则的匹配的分辨率类型
   + `roleArn`（必填）— 用于执行工作流程的 IAM 角色 ARN
   + `ruleConditionProperties`（必填）-规则条件列表和匹配规则的名称。

   可选参数包括：
   + `description`— 最多 255 个字符
   + `incrementalRunConfig`— 增量运行类型配置
   + `tags`— 最多 200 个键值对

1. （可选）要使用增量处理而不是默认的标准（批处理）处理，请在请求正文中添加以下参数：

   ```
   "incrementalRunConfig": {
      "incrementalRunType": "AUTOMATIC"
   }
   ```

1. 发送 请求。

1. 如果成功，您将收到状态码 200 的响应和包含以下内容的 JSON 正文：

   ```
   {
      "workflowArn": "string",
      "workflowName": "string",
      // Plus all configured workflow details
   }
   ```

1. 如果呼叫失败，您可能会收到以下错误之一：
   + 400- ConflictException 如果工作流程名称已经存在
   + 400 — ValidationException 如果输入未通过验证
   + 402- ExceedsLimitException 如果超过账户限额
   + 403 — AccessDeniedException 如果你没有足够的访问权限
   + 429 — ThrottlingException 如果请求被限制
   + 500 — InternalServerException 如果内部服务出现故障

------