爬网程序属性 - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

爬网程序属性

在使用Amazon Glue控制台或AmazonGlue 合 API,您需要指定以下信息:

爬网程序名称以及可选描述符和设置

设置包含标签、安全配置和自定义分类器。您可以先定义自定义分类器,然后再定义爬网程序。有关更多信息,请参阅下列内容:

爬网程序源类型

爬网程序可以直接访问数据存储作为爬取的源,也可以使用数据目录中的现有表作为源。如果爬网程序使用现有目录表,它将爬取由这些目录表指定的数据存储。有关更多信息,请参阅 爬网程序源类型

仅爬网 S3 数据源的新文件夹

如果启用此选项,则仅搜索自上次爬网程序运行以来添加的 Amazon S3 文件夹。有关更多信息,请参阅 中的增量爬网Amazon Glue

Crawler 源:数据存储或目录表

从以下选项中进行选择:

  • 一个或多个数据存储

    一个爬网程序可爬取不同类型(Amazon S3、JDBC 等)的多个数据存储。

  • 数据目录表列表

    目录表指定要爬取的数据存储。爬网程序在单次运行中只能爬取目录表;它无法混用其他源类型。

一次仅可以配置一个数据存储。提供连接信息并包含路径和排除模式后,您可以选择添加另一个数据存储。

有关更多信息,请参阅 爬网程序源类型

其他爬虫源参数

每个源类型需要一组不同的附加参数。以下是一个不完整的列表:

Connection

选择或添加Amazon Glue连接。有关连接的信息,请参阅 在 中定义连接Amazon Glue数据目录

启用数据采样(仅适用于 Amazon DynamoDB、MongoDB 和 Amazon DocumentDB 数据存储)

选择是否仅对数据样本进行爬网。如果未选择该选项,则对整个表进行爬网。当表不是高吞吐量表时,扫描所有记录会花费很长时间。

扫描速率(仅适用于 DynamoDB 数据存储)

指定 Amazon Glue 爬网程序使用的已配置读取容量单位的百分比。读取容量单位是一个由 DynamoDB 定义的术语,它是一个数值,用作每秒可对表执行的读取次数的速率限制器。请输入介于 0.1 和 1.5 之间的值。如果未指定,则该值默认为 0.5(对于预配置的表)和配置的最大容量的 1/4(对于按需表)。

样本大小(可选)(仅适用于 Amazon S3 数据存储)

指定搜索数据集中的示例文件时每个叶文件夹中要搜索的文件数。启用此功能后,Crawler 会随机选择每个叶文件夹中的某些文件进行爬网,而不是搜索此数据集中的所有文件。

采样 Crawler 最适合以前对其数据格式有了解并且知道其文件夹中的架构不会更改的客户。启用此功能将显著减少 Crawler 运行时间。

有效值是介于 1 和 249 之间的整数。如果未指定,则对所有文件进行爬网。

包含路径
对于 Amazon S3 数据存储

选择是在您的账户还是其他账户中指定路径,然后浏览以选择 Amazon S3 路径。

对于 JDBC 数据存储

输入 <database>/<schema>/<table><database>/<table>,具体取决于数据库产品。Oracle Database 和 MySQL 不支持路径中的架构。您可以用百分比 (%) 字符替换 <schema><table>。例如,对于系统标识符 (SID) 为 orcl 的 Oracle 数据库,输入 orcl/% 以导入连接中指定的用户有权访问的所有表。

重要

此字段区分大小写。

对于 MongoDB 或 Amazon DocumentDB 数据存储

Enterdatabase/collection

有关更多信息,请参阅 包含和排除模式

排除模式

您可以使用这些模式从爬取中排除某些文件或表。有关更多信息,请参阅 包含和排除模式

IAM 角色

爬网程序将担任此角色。它必须具有类似于Amazon管理的策略AWSGlueServiceRole。对于 Amazon S3 和 DynamoDB 源,它还必须具有访问数据存储的权限。如果抓取程序读取 Amazon S3 数据Amazon Key Management Service(Amazon KMS),则该角色必须具有Amazon KMS密钥。

对于 Amazon S3 数据存储,附加到角色的其他权限类似于以下内容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket/object*" ] } ] }

对于 Amazon DynamoDB 数据存储,附加到角色的其他权限将类似于以下内容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:Scan" ], "Resource": [ "arn:aws:dynamodb:region:account-id:table/table-name*" ] } ] }

有关更多信息,请参阅 第 2 步:为 Amazon Glue 创建 IAM 角色管理的访问权限AmazonGlue 资源

爬网程序计划

您可以按需运行爬网程序,或制定计划以自动运行爬网程序。有关更多信息,请参阅 安排 Amazon Glue 爬网程序

数据目录中用于所创建的目标数据库

有关更多信息,请参阅 在数据目录中定义数据库

输出配置选项选项

选项包括爬网程序应如何处理检测到的架构更改、数据存储中的已删除对象等等。有关更多信息,请参阅 设置爬网程序配置选项

Recrawwler 策略

在第一次爬网完成后对 Amazon S3 数据源进行搜索时,请选择是再次抓取整个数据集还是仅抓取自上次爬网程序运行以来添加的文件夹。有关更多信息,请参阅 中的增量爬网Amazon Glue

爬网程序源类型

爬网程序可以直接访问数据存储作为爬取的源,也可以使用现有目录表作为源。如果爬网程序使用现有目录表,它将爬取由这些目录表指定的数据存储。

将目录表指定为源的常见原因是您手动创建此表时(因为您已经知道数据存储的结构)和您希望爬网程序让表保持更新,包括添加新分区。有关其他原因的讨论,请参阅使用爬网程序更新手动创建的数据目录表

当您指定现有表作为爬网程序源类型时,以下条件适用:

  • 数据库名称是可选的。

  • 仅允许指定 Amazon S3 或 Amazon DynamoDB 数据存储的目录表。

  • 爬网程序运行时,不会创建新的目录表。根据需要更新现有表,包括添加新分区。

  • 将忽略在数据存储中找到的已删除对象;不删除目录表。而是由爬网程序写入日志消息。(SchemaChangePolicy.DeleteBehavior=LOG)

  • 默认情况下启用为每个 Amazon S3 路径创建单一架构的爬网程序配置选项,且不能禁用此选项。(TableGroupingPolicy=CombineCompatibleSchemas) 有关更多信息,请参阅。如何为每个 Amazon S3 包含路径创建单个架构

  • 您不能将目录表与任何其他源类型(例如 Amazon S3 或 Amazon DynamoDB)混用来作为源。

包含和排除模式

在评估要在爬取中包含或排除的内容时,爬网程序首先评估所需的包含路径。对于 Amazon S3、MongoDB、Amazon DocumentDB(具有 MongoDB 兼容性)和关系数据存储,您必须指定包含路径。

对于 Amazon S3 数据存储,包含路径语法为bucket-name/folder-name/file-name.ext。要网络爬取存储桶中的所有对象,只需在包含路径中指定存储桶名称。排除模式与包含路径是相对的

对于 MongoDB 和 Amazon DocumentDB(与 MongoDB 兼容),语法为database/collection

对于 JDBC 数据存储,语法为 database-name/schema-name/table-namedatabase-name/table-name。语法取决于数据库引擎是否支持数据库中的架构。例如,对于 MySQL 或 Oracle 等数据库引擎,请不要在包含路径中指定 schema-name。您可以用百分号 (%) 取代包含路径中的架构或表,以表示数据库中的所有架构或所有表。您不能用百分号 (%) 取代包含路径中的数据库。排除路径与包含路径是相对的。例如,要排除 JDBC 数据存储中的一个表,请在排除路径中键入该表的名称。

爬网程序使用包含 JDBC URI 连接字符串的 Amazon Glue 连接连接到 JDBC 数据存储。该爬网程序只能使用 Amazon Glue 连接中的 JDBC 用户名和密码来访问数据库引擎中的对象。爬网程序只能创建它通过 JDBC 连接可以访问的表。 在爬网程序使用 JDBC URI 访问数据库引擎后,包含路径用于确定在数据目录中创建了数据库引擎中的哪些表。例如,对于 MySQL,如果您指定包含路径MyDatabase/%,那么MyDatabase在数据目录中创建。访问 Amazon Redshift 时,如果您指定MyDatabase/%,然后数据库的所有模式中的所有表MyDatabase在数据目录中创建。如果您指定包含路径 MyDatabase/MySchema/%,则会创建数据库 MyDatabase 和架构 MySchema 中的所有表。

指定包含路径后,您可以通过指定一个或多个 Unix 样式 glob 排除模式,从网络爬取中排除对象 (否则您的包含路径会包括它)。这些模式应用于您的包含路径,以确定哪些对象被排除。这些模式也会存储为由爬网程序创建的表的属性。Amazon GluePySpark 扩展模块,例如create_dynamic_frame.from_catalog中,读取表属性并排除由排除模式定义的对象。

Amazon Glue 在排除模式中支持以下类型的 glob 模式。

排除模式 描述
*.csv 与表示当前文件夹中以结尾的对象名称的 Amazon S3 路径匹配.csv
*.* 与包含点的所有对象名称匹配
*.{csv,avro} 与以 .csv.avro 结尾的对象名称匹配
foo.? 与以 foo. 开头,后跟单个字符扩展名的对象名称匹配
myfolder/* myfolder 的一个级别子文件夹中的对象匹配,例如 /myfolder/mysource
myfolder/*/* myfolder 的两个级别子文件夹中的对象匹配,例如 /myfolder/mysource/data
myfolder/** myfolder 的所有子文件夹中的对象匹配,例如 /myfolder/mysource/mydata/myfolder/mysource/data
myfolder** 匹配子文件夹 myfolder 以及 myfolder 下的文件,如 /myfolder/myfolder/mydata.txt
Market* 与具有以 Market 开头的名称的 JDBC 数据库中的表匹配,例如 Market_usMarket_fr

Amazon Glue 解释 glob 排除模式,如下所示:

  • 使用斜杠 (/) 字符是将 Amazon S3 密钥分隔到文件夹层次结构中的分隔符。

  • 星号 (*) 字符与不跨越文件夹边界的名称组分的零个或多个字符匹配。

  • 双星号 (**) 与跨越文件夹或架构边界的零个或多个字符匹配。

  • 问号 (?) 字符恰好匹配名称组分的一个字符。

  • 反斜杠 (\) 字符用于对其他可以解释为特殊字符的字符进行转义。表达式 \\ 与单个反斜杠匹配,\{ 与左大括号匹配。

  • 方括号 [ ] 创建一个与名称组分的单个字符 (来自一组字符) 匹配的方括号表达式。例如,[abc]abc 匹配。连字符 (-) 可用于指定范围,因此 [a-z] 指定与从 az (含) 的范围匹配。这些形式可以混合,因此 [abce-g] 与 abcefg 匹配。如果方括号 ([) 后的字符是感叹号 (!),则括号表达式是否定的。例如,[!a-c]abc 以外的任何字符匹配。

    在方括号表达式内,*?\ 字符与自身匹配。如果连字符 (-) 是方括号内的第一个字符,或者如果它在您否定时是 ! 之后的第一个字符,则它与自身匹配。

  • 大括号 ({ }) 将一组子模式 (如果组中的任何子模式匹配,则组匹配) 括起来。逗号 (,) 字符用于分隔子模式。不能对组进行嵌套。

  • 在匹配操作中,文件名中的前导句点或点字符被视为正常字符。例如,* 排除与文件名 .hidden 匹配的模式。

例 Amazon S3 排除模式

将会根据包含路径计算每个排除模式。例如,假设您具有以下 Amazon S3 目录结构:

/mybucket/myfolder/ departments/ finance.json market-us.json market-emea.json market-ap.json employees/ hr.json john.csv jane.csv juan.txt

假定包含路径 s3://mybucket/myfolder/,下面是排除模式的一些示例结果:

排除模式 结果
departments/** 排除 departments 下面的所有文件和文件夹,并包括 employees 文件夹及其文件
departments/market* 排除 market-us.jsonmarket-emea.jsonmarket-ap.json
**.csv 排除名称以 .csv 结尾的 myfolder 下面的所有对象
employees/*.csv 排除 employees 文件夹中的所有 .csv 文件

例 排除 Amazon S3 分区的子集

假设数据按天进行分区,以便一年中的每一天都在单独的 Amazon S3 分区中。对于 2015 年 1 月,有 31 个分区。现在,若要仅网络爬取 1 月的第一周内的数据,您必须排除除第 1 到第 7 天之外的所有分区:

2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**

让我们来看一下此 glob 模式的几个部分。第一部分 2015/01/{[!0],0[8-9]}** 排除不以“0”开头的所有天,以及 2015 年 01 月中的第 08 和第 09 天。请注意,“**”用作日期数字模式的后缀,并穿越文件夹边界直到较低级别的文件夹。如果使用“*”,则不排除较低文件夹级别。

第二部分 2015/0[2-9]/** 排除 2015 年 02 月 09 月中的天。

第三部分 2015/1[0-2]/** 排除 2015 年 10、11 和 12 月中的天。

例 JDBC 排除模式

假设您使用以下架构结构爬取 JDBC 数据库:

MyDatabase/MySchema/ HR_us HR_fr Employees_Table Finance Market_US_Table Market_EMEA_Table Market_AP_Table

假定包含路径 MyDatabase/MySchema/%,下面是排除模式的一些示例结果:

排除模式 结果
HR* 排除名称以 HR 开头的表
Market_* 排除名称以 Market_ 开头的表
**_Table 排除名称以 _Table 结尾的所有表