设置爬网程序配置选项
当爬网程序运行时,它可能会遇到导致架构或分区与以前的爬网不同的数据存储更改。您可以使用 Amazon Web Services Management Console或 Amazon Glue API 来配置爬网程序如何处理某些类型的更改。
主题
在 Amazon Glue 控制台上设置爬网程序配置选项
当您使用 Amazon Glue 控制台定义爬网程序时,有多个选项可用于配置爬网程序的行为。有关使用 Amazon Glue 控制台添加爬网程序的更多信息,请参阅在 Amazon Glue 控制台上使用爬网程序。
当爬网程序针对以前已爬网的数据存储运行时,可能会发现架构已更改或数据存储中的一些对象已被删除。爬网程序将记录架构更改。根据爬网程序的源类型,可能创建新的表和分区,而不考虑架构更改策略。
要指定爬网程序在发现架构中的更改时执行什么操作,您可以在控制台上选择下列操作之一:
Update the table definition in the Data Catalog (更新数据目录中的表定义) – 在 Amazon Glue Data Catalog 中添加新列、删除缺少的列并修改现有列的定义。删除爬网程序未设置的任何元数据。这是默认设置。
-
Add new columns only (仅添加新列) – 对于映射到 Amazon S3 数据存储的表,在发现新列时添加这些新列,但不删除或更改数据目录中的现有列的类型。当数据目录中的当前列正确且您不希望爬网程序删除或更改现有列的类型时,选择此选项。如果基本 Amazon S3 表属性(如分类、压缩类型或 CSV 分隔符)更改,将此表标记为已弃用。保留数据目录中存在的输入格式和输出格式。仅当 SerDe 参数是由爬网程序设置时,才更新该参数。对于所有其他数据存储,修改现有列定义。
Ignore the change and don't update the table in the Data Catalog (忽略更改,不更新数据目录中的表) – 只创建新表和分区。
这是增量爬网的默认设置。
爬网程序可能还发现新的或更改的分区。默认情况下,会添加新分区,如果现有分区已更改,则会更新它们。此外,您还可以在 Amazon Glue 控制台上将爬网程序配置选项设置为 Update all new and existing partitions with metadata from the table (使用表中的元数据更新所有新的和现有的分区)。设置此选项后,分区会继承其父表中的元数据属性,如分类、输入格式、输出格式、SerDe 信息和架构。对表中的这些属性进行的任何更改都将传播到其分区。当在现有爬网程序上设置此配置选项时,将会更新现有分区,以便在下次爬网程序运行时与父表的属性相匹配。
要指定爬网程序在数据存储中找到已删除对象时执行什么操作,请选择下列操作之一:
删除数据目录中的表和分区
Ignore the change and don't update the table in the Data Catalog (忽略更改,不更新数据目录中的表
这是增量爬网的默认设置。
Mark the table as deprecated in the Data Catalog (在数据目录中将表标记为已弃用) – 这是默认设置。
使用 API 设置爬网程序配置选项
当使用 Amazon Glue API 定义爬网程序时,您可以从多个字段中选择来配置爬网程序。爬网程序 API 中的 SchemaChangePolicy
确定爬网程序在发现已更改的架构或已删除的对象时执行什么操作。爬网程序在运行时记录架构更改。
当爬网程序运行时,无论架构更改策略如何,都始终会创建新的表和分区。您可以在 SchemaChangePolicy
结构中的 UpdateBehavior
字段中选择以下操作之一来确定爬网程序在发现更改的表架构时执行什么操作:
UPDATE_IN_DATABASE
– 更新 中的表。Amazon Glue Data Catalog添加新列、删除缺少的列并修改现有列的定义。删除爬网程序未设置的任何元数据。LOG
– 忽略更改,不更新数据目录中的表这是增量爬网的默认设置。
您也可以使用爬网程序 API Configuration
字段中提供的 JSON 对象覆盖 SchemaChangePolicy
结构。此 JSON 对象可以包含键–值对以将策略设置为不更新现有列并仅添加新列。例如,以字符串形式提供以下 JSON 对象:
{ "Version": 1.0, "CrawlerOutput": { "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } }
此选项对应于 Amazon Glue 控制台上的 Add new columns only (仅添加新列) 选项。它仅覆盖通过对 Amazon S3 数据存储进行网络爬取生成的表的 SchemaChangePolicy
结构。如果您希望保留数据目录(可信来源)中存在的元数据,请选择此选项。在遇到新列时添加这些新列,包括嵌套数据类型。但是,不会删除现有列,且不会更改其类型。如果 Amazon S3 表属性显著更改,将此表标记为已弃用,并记录一条警告,指示需要解决不兼容的属性。
当爬网程序针对以前爬取的数据存储运行时,它可能会发现新的或已更改的分区。默认情况下,会添加新分区,如果现有分区已更改,则会更新它们。此外,您还可以将爬网程序配置选项设置为 InheritFromTable
(对应于 Amazon Glue 控制台上的 Update all new and existing partitions with metadata from the table (使用表中的元数据更新所有新的和现有的分区) 选项)。设置此选项后,分区会继承其父表中的元数据属性,如分类、输入格式、输出格式、SerDe 信息和架构。对父表进行的任何属性更改都将传播到其分区。
当在现有爬网程序上设置此配置选项时,将会更新现有分区,以便在下次爬网程序运行时与父表的属性相匹配。在爬网程序 API Configuration
字段中设置此行为。例如,以字符串形式提供以下 JSON 对象:
{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }
爬网程序 API Configuration
字段可以设置多个配置选项。例如,要配置分区和表的爬网程序输出,可以提供以下 JSON 对象的字符串表示形式:
{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } } }
您可以选择下列操作之一来确定爬网程序在数据存储中找到已删除对象时执行什么操作。爬网程序 API 中的 SchemaChangePolicy
结构中的 DeleteBehavior
字段设置爬网程序在发现已删除对象时的行为。
DELETE_FROM_DATABASE
– 删除数据目录中的表和分区。LOG
– 忽略更改。请勿更新数据目录。而是写入日志消息。DEPRECATE_IN_DATABASE
– 在数据目录中将表标记为已弃用。这是默认设置。
如何阻止爬网程序更改现有架构
如果您不希望爬网程序覆盖您对 Amazon S3 表定义中的现有字段进行的更新,请在控制台上选择选项 Add new columns only (仅添加新列) 或设置配置选项 MergeNewColumns
。这适用于表和分区,除非 Partitions.AddOrUpdateBehavior
被覆盖为 InheritFromTable
。
如果您不希望在爬网程序运行时更改表架构,请将架构更改策略设置为 LOG
。您还可以设置将分区架构设置为从表继承的配置选项。
如果您在控制台上配置爬网程序,可以选择以下操作:
Ignore the change and don't update the table in the Data Catalog (忽略更改,不更新数据目录中的表
Update all new and existing partitions with metadata from the table (使用表中的元数据更新所有新的和现有的分区
当您使用 API 配置爬网程序时,请设置以下参数:
将
SchemaChangePolicy
结构中的UpdateBehavior
字段设置为LOG
。使用爬网程序 API 中的以下 JSON 对象的字符串表示形式设置
Configuration
字段;例如:{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }
如何为每个 Amazon S3 包含路径创建单个架构
默认情况下,当爬网程序为 Amazon S3 中存储的数据定义表时,它会同时考虑数据兼容性和架构相似性。它考虑的数据兼容性因素包括数据是否具有相同的格式(例如,JSON),相同的压缩类型(例如,GZIP),Amazon S3 路径的结构以及其他数据属性。架构相似性衡量单独 Amazon S3 对象的架构的相似程度。
您可以在可能的情况下将 CombineCompatibleSchemas
的爬网程序配置为公用表定义。使用此选项,爬网程序仍会考虑数据兼容性,但在评估指定包含路径中的 Amazon S3 对象时会忽略特定架构的相似性。
如果要在控制台上配置爬网程序以组合架构,请选择爬网程序选项 Create a single schema for each S3 path (为每个 S3 路径创建单个架构)。
当您使用 API 配置爬网程序时,请设置以下配置选项:
使用爬网程序 API 中的以下 JSON 对象的字符串表示形式设置
Configuration
字段;例如:{ "Version": 1.0, "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" } }
为帮助说明此选项,假设您使用包含路径 s3://bucket/table1/
定义了一个爬网程序。当该爬网程序运行时,它会找到两个具有以下特征的 JSON 文件:
-
文件 1 –
S3://bucket/table1/year=2017/data1.json
-
文件内容 –
{“A”: 1, “B”: 2}
-
架构 –
A:int, B:int
-
文件 2 –
S3://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 S3 中存储的数据定义表时,爬网程序会尝试将架构合并在一起并创建顶级表(year=2019
)。在某些情况下,您可能希望爬网程序为文件夹 month=Jan
创建一个表,但由于同级文件夹(month=Mar
)已合并到同一个表中,因此爬网程序会创建一个分区。
通过表级别爬网程序选项,您可以灵活地告诉爬网程序表的位置,以及您希望如何创建分区。当您指定 Table level (表级别) 时,则会从 Amazon S3 存储桶中以该绝对级别创建表。

当在控制台上配置爬网程序时,您可以为 Table level (表级别) 爬网程序选项指定一个值。该值必须是指示表位置(数据集中的绝对级别)的正整数。顶级文件夹的级别为 1。例如,对于路径 mydataset/a/b
,如果级别设置为 3,则在位置 mydataset/a/b
处创建表。
如何为 Delta Lake 数据存储指定配置选项
在为 Delta Lake 数据存储配置网络爬取程序时,可以指定以下配置参数:
- 连接
-
可以选择或添加要用于此 Amazon S3 目标的网络连接。有关连接的信息,请参阅 定义 Amazon Glue 数据目录中的连接。
- 启用写入清单
-
选择是否检测 Delta Lake 事务处理日志中的表元数据或 Schema 更改;它会重新生成清单文件。如果已经使用 Delta Lake
SET TBLPROPERTIES
配置了自动清单更新,则不应选择此选项。 - 包含 Delta Lake 表路径
-
将一个或多个指向 Delta 表的 Amazon S3 路径,格式为 s3://
bucket
/prefix
/object
。
