

# 联接数据集
<a name="transforms-configure-join"></a>

*Join* 转换允许您将两个数据集合成一个数据集。您可以在每个数据集的架构中指定键名称以进行比较。输出 `DynamicFrame` 包含键符合联接条件的行。每个数据集中满足连接条件的行将合并为输出 `DynamicFrame` 中的单一行，其中包含在任一数据集中找到的所有列。

**将 Join 转换节点添加到任务图**

1. 如果只有一个可用的数据源，则必须向任务图中添加新的数据源节点。

1. 为联接选择源节点。打开资源面板，然后选择**联接**将新转换添加到作业图。

1. 在 **Node properties (节点属性)** 选项卡上，输入任务图中节点的名称。

1. 在标题 **Node parents (父节点)** 下的 **Node properties (节点属性)** 选项卡中，添加一个父节点，以便有两个数据集为联接提供输入。父节点可以是数据源节点，也可以是转换节点。
**注意**  
一个联接只能有两个父节点。

1. 选择 **Transform (转换)** 选项卡。

   如果您看到一条消息，指出有存在冲突的键名称，您可以执行以下操作：
   + 请选择 **Resolve it (解决)**，自动将 *ApplyMapping* 转换节点添加到您的任务图。ApplyMapping 节点会为数据集中与其他数据集中的键同名的键添加前缀。例如，如果使用默认值 **right**，则右侧数据集中与左侧数据集中的键同名的键都重命名为 `(right)key name`。
   + 在任务图中的前面手动添加转换节点，以删除或重命名冲突的键。

1. 在 **Join type (联接类型)** 列表中选择联接类型。
   + **Inner join (内部联接)**：对于基于联接条件的每个匹配项，返回包含来自两个数据集的列的行。不会返回不满足联接条件的行。
   + **Left join (左侧联接)**：左侧数据集中的所有行，以及右侧数据集中满足连接条件的行。
   + **Right join (右侧联接)**：右侧数据集中的所有行，以及左侧数据集中满足连接条件的行。
   + **Outer join (外部联接)**：两个数据集中的所有行。
   + **Left semi join (左半联接)**：左侧数据集中基于连接条件在右侧数据集中具有匹配项的所有行。
   + **Left anti join (左反联接)**：左侧数据集中基于连接条件在右侧数据集中没有匹配项的所有行。

1. 在标题 **Join conditions (联接条件)** 下的 **Transform (转换)** 选项卡中，选择 **Add condition (添加条件)**。从每个数据集中选择要比较的属性键。比较运算符左侧的属性键称为左侧数据集，右侧的属性键称为右侧数据集。

   对于更复杂的联接条件，您可以多次选择 **Add condition (添加条件)**，添加其他匹配键。如果您意外添加了条件，您可以选择删除图标（![\[\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/delete-icon-black.png)）将其删除。

1. （可选）配置转换节点属性后，您可以选择节点详细信息面板中的 **Output schema (输出架构)** 选项卡，查看数据的修改架构。当您首次为任务中的任何节点选择此选项卡时，系统会提示您提供 IAM 角色以访问数据。如果您尚未在 **Job details (任务详细信息)** 选项卡上指定 IAM 角色，系统会提示您在此处输入 IAM 角色。

1. （可选）配置节点属性和转换属性后，您可以选择节点详细信息窗格中的 **Data preview (数据预览)** 选项卡来预览已修改的数据集。当您首次为任务中的任何节点选择此选项卡时，系统会提示您提供 IAM 角色以访问数据。使用此功能会产生相关费用，并且一旦您提供 IAM 角色，则会立即开始计费。

有关连接输出架构的示例，请考虑使用以下属性键在两个数据集之间进行联接：

```
Left: {id, dept, hire_date, salary, employment_status}
Right: {id, first_name, last_name, hire_date, title}
```

使用 `=` 比较运算符将联接配置为匹配 `id` 和 `hire_date` 键。

因为两个数据集都包含 `id` 和 `hire_date` 键，所以您选择 **Resolve it (解决)** 可自动将前缀 **right** 添加到正确数据集中的键。

输出架构中的键如下：

```
{id, dept, hire_date, salary, employment_status, 
(right)id, first_name, last_name, (right)hire_date, title}
```