

# 为每条 Amazon S3 包含路径创建单个架构
<a name="crawler-grouping-policy"></a>

默认情况下，当爬网程序为 Amazon S3 中存储的数据定义表时，它会同时考虑数据兼容性和架构相似性。它考虑的数据兼容性因素包括数据是否具有相同的格式（例如，JSON），相同的压缩类型（例如，GZIP），Amazon S3 路径的结构以及其他数据属性。架构相似性衡量单独 Amazon S3 对象的架构的相似程度。

为帮助说明此选项，假设您使用包含路径 `s3://amzn-s3-demo-bucket/table1/` 定义了一个爬网程序。当该爬网程序运行时，它会找到两个具有以下特征的 JSON 文件：
+ **文件 1** – `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *文件内容* – `{“A”: 1, “B”: 2}`
+ *架构* – `A:int, B:int`
+ **文件 2** – `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *文件内容* – `{“C”: 3, “D”: 4}`
+ *架构* – `C: int, D: int`

默认情况下，该爬网程序会创建两个名为 `year_2017` 和 `year_2018` 的表，因为架构不够相似。但是，如果选项 **Create a single schema for each S3 path (为每个 S3 路径创建单个架构)** 处于选中状态，并且数据是兼容的，则爬网程序会创建一个表。该表具有架构 `A:int,B:int,C:int,D:int` 和 `partitionKey` `year:string`。

------
#### [ Amazon Web Services 管理控制台 ]

1. 登录 Amazon Web Services 管理控制台，然后打开 Amazon Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.amazonaws.cn/glue/)。

1. 在**数据目录**下选择**爬网程序**。

1. 配置新爬网程序时，在**输出和计划**下，选择高级选项下的**为每条 S3 路径创建单个架构**选项。

------
#### [ Amazon CLI ]

您可以在可能的情况下将 `CombineCompatibleSchemas` 的爬网程序配置为公用表定义。使用此选项，爬网程序仍会考虑数据兼容性，但在评估指定包含路径中的 Amazon S3 对象时会忽略特定架构的相似性。

当您使用 Amazon CLI 配置爬网程序时，请设置以下配置选项：

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

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

当您使用 API 配置爬网程序时，请设置以下配置选项：

 使用爬网程序 API 中的以下 JSON 对象的字符串表示形式设置 `Configuration` 字段；例如：

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------