本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置爬网程序配置选项
当爬网程序运行时,它可能会遇到导致架构或分区与以前的爬网不同的数据存储更改。您可以使用 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 参数是由 Crawler 设置的参数时才更新参数。对于所有其他数据存储,修改现有列定义。
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
处创建表。
如何指定允许爬网程序创建的最大表数
您可以选择允许爬网程序创建的最大表数,方法是通过 Amazon Glue 控制台或 CLI 指定 TableThreshold
。如果爬网程序在其爬取过程中检测到的表数大于此输入值,则爬取失败且不会向 Data Catalog 写入任何数据。
当爬网程序检测和创建的表数比预期表数要大得多时,此参数非常有用。这可能有多种原因,例如:
使用 Amazon Glue 作业填充 Amazon S3 位置时,您最终可能会得到与文件夹相同级别的空文件。在这种情况下,当您在此 Amazon S3 位置运行爬网程序时,由于文件和文件夹位于同一级别,爬网程序会创建多个表。
如果没有配置
"TableGroupingPolicy": "CombineCompatibleSchemas"
,您最终得到的表数可能比预期数量多。
您可以将 TableThreshold
指定为一个大于 0 的整数值。该值根据每个爬网程序进行配置。也就是说,每次爬取都会考虑该值。例如:爬网程序的 TableThreshold
值设置为 5。每次爬取时,Amazon Glue 会将检测到的表数与此表阈值(5)进行比较。如果检测到的表数小于 5,Amazon Glue 将表写入 Data Catalog;否则,爬取失败,将不会写入 Data Catalog。
控制台
使用 Amazon 控制台设置 TableThreshold
:

CLI
使用 Amazon CLI 设置 TableThreshold
:
"{"Version":1.0, "CrawlerOutput": {"Tables":{"AddOrUpdateBehavior":"MergeNewColumns", "TableThreshold":5}}}";
记录错误消息以帮助您识别表路径和清理数据。爬网程序因表数大于提供的表阈值而失败时您账户中的日志示例:
Table Threshold value = 28, Tables detected - 29
在 CloudWatch,我们将检测到的所有表位置记录为 INFO 消息。将错误记录为失败原因。
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog. com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
如何为 Delta Lake 数据存储指定配置选项
在为 Delta Lake 数据存储配置网络爬取程序时,可以指定以下配置参数:
- 连接
-
可以选择或添加要用于此 Amazon S3 目标的网络连接。有关连接的信息,请参阅 在 Amazon Glue Data Catalog 中定义连接。
- 创建用于查询的表
-
选择要如何创建 Delta Lake 表:
创建原生表:允许与支持直接查询 Delta 事务日志的查询引擎集成。
创建符号链接表:根据指定的配置参数,使用由由分区键分区的清单文件创建符号链接清单文件夹。
- 启用写入清单(仅限您选择为 Delta Lake 源创建符号链接表时才可配置)
-
选择是否检测 Delta Lake 事务处理日志中的表元数据或 Schema 更改;它会重新生成清单文件。如果已经使用 Delta Lake
SET TBLPROPERTIES
配置了自动清单更新,则不应选择此选项。 - 包含 Delta Lake 表路径
-
将一个或多个指向 Delta 表的 Amazon S3 路径,格式为 s3://
bucket
/prefix
/object
。

如何将爬网程序配置为使用 Lake Formation 凭证
您可以将爬网程序配置为使用 Amazon Lake Formation 凭证访问 Amazon S3 数据存储库或 Data Catalog 表的证书,该表包含相同 Amazon Web Services 账户 或不同 Amazon Web Services 账户 中的基础 Amazon S3 位置。如果爬网程序与 Data Catalog 表位于同一账户中,则可以将现有 Data Catalog 表配置为爬网程序的目标。使用 Data Catalog 表作为爬网程序的目标时,目前只允许具有单个目录表的单个目录目标。
注意
将 Data Catalog 表定义为爬网程序目标时,请确保 Data Catalog 表的基础位置是 Amazon S3 位置。使用 Lake Formation 凭证的爬网程序仅支持具有基础 Amazon S3 位置的 Data Catalog 目标。
爬网程序与注册的 Amazon S3 位置或 Data Catalog 表位于同一账户(账户内爬取)时所需的设置
要允许爬网程序使用 Lake Formation 凭证访问数据存储或 Data Catalog 表,您需要向 Lake Formation 注册数据位置。此外,爬网程序的 IAM 角色必须有从 Amazon S3 桶的注册目标读取数据的权限。
您可以使用 Amazon Web Services Management Console 或 Amazon Command Line Interface(Amazon CLI)完成以下配置步骤。
爬网程序与注册的 Amazon S3 位置位于不同账户(跨账户爬取)时所需的设置
要允许爬网程序使用 Lake Formation 凭证访问不同账户中的数据存储,您必须先向 Lake Formation 注册 Amazon S3 数据位置。然后,通过执行以下步骤向爬网程序的账户授予数据位置权限。
您可以使用 Amazon Web Services Management Console 或 Amazon CLI 完成以下步骤。
注意
只有 Amazon S3 和 Data Catalog 目标支持使用 Lake Formation 凭证的爬网程序。
对于使用 Lake Formation 凭证售卖的目标,基础 Amazon S3 位置必须属于同一个桶。例如,只要所有目标位置都在同一个桶(bucket1)下,客户就可以使用多个目标(s3://bucket1/folder1、s3://bucket1/folder2)。不允许指定不同的桶(s3://bucket1/folder1、s3://bucket2/folder2)。
目前,对于 Data Catalog 目标爬网程序,只允许具有单个目录表的单个目录目标。