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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

爬网程序属性

使用 AWS Glue 控制台或 AWS Glue API 定义爬网程序时,您可以指定以下信息:

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

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

爬网程序源类型

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

爬网程序源(请选择以下两种类型之一。)
  • 一个或多个数据存储

    一个爬网程序可在单次运行中爬取不同类型(Amazon S3、Amazon DynamoDB 和 JDBC)的多个数据存储。

  • Data Catalog 表的列表

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

启用数据采样(仅适用于 DynamoDB 数据存储)

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

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

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

连接(仅适用于 JDBC 数据存储)

选择或添加连接。有关连接的信息,请参阅在 AWS Glue Data Catalog 中定义连接

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

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

对于 JDBC 数据存储

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

重要

此字段区分大小写。

排除模式

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

用于访问数据存储的 IAM 角色或 JDBC 凭证

有关更多信息,请参阅 Managing Access Permissions for AWS Glue Resources

爬网程序计划

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

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

有关更多信息,请参阅 Defining a Database in Your Data Catalog

爬网程序配置选项

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

在定义爬网程序时,您可以选择一个或多个分类器来评估用于推断架构的数据的格式。当爬网程序运行时,列表中的第一个分类器可以成功识别您的数据存储,用于为表创建架构。您可以使用内置分类器或定义您自己的分类器。您可以在定义爬网程序之前,在单独的操作中定义您的自定义分类器。AWS Glue 提供内置分类器,用于使用包含 JSON、CSV 和 Apache Avro 的格式从公共文件中推断架构。有关 AWS Glue 中内置分类器的当前列表,请参阅 AWS Glue 中的内置分类器

爬网程序源类型

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

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

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

  • 数据库名称是可选的。

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

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

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

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

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

包含和排除模式

在评估要在爬网中包含或排除的内容时,爬网程序首先评估 Amazon S3 和关系数据存储所需的包含路径。对于要爬网的每个数据存储,都必须指定一个包含路径。

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

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

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

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

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

排除模式 描述
*.csv 与表示当前文件夹中以 .csv 结尾的对象名称的 Amazon S3 路径匹配
*.* 与包含点的所有对象名称匹配
*.{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

AWS 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 结尾的所有表