步骤 2:选择数据源和分类器 - AWS Glue

步骤 2:选择数据源和分类器

接下来,为爬网程序配置数据来源和分类器。

有关支持的数据来源的更多信息,请参阅支持的可供爬取的数据来源

数据源配置

为 “您的数据是否已映射到” 选择相应的选项 AWS Glue 桌子? 选择 “还没有” 或 “是”。默认情况下已选择“尚未”。

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

  • 还没有:选择一个或多个要爬取的数据源。爬虫可以抓取多个不同类型的数据存储(Amazon S3 JDBC 等)。

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

  • 是:从您的表格中选择现有表格 AWS Glue 数据目录。目录表指定要爬取的数据存储。爬网程序在单次运行中只能爬取目录表;它无法混用其他源类型。

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

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

    • 数据库名称是可选的。

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

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

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

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

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

要使用 Delta 表,请先使用 At DDL hena 或创建增量表。 AWS Glue API

使用 Athena,将位置设置为你的 Amazon S3 文件夹,将表格类型设置为 “”。DELTA

CREATE EXTERNAL TABLE database_name.table_name LOCATION 's3://bucket/folder/' TBLPROPERTIES ('table_type' = 'DELTA')

使用 AWS Glue API,在表参数映射中指定表类型。表参数需要包含以下键/值对。有关如何创建表的更多信息,请参阅有关 create_table 的 Boto3 文档

{ "table_type":"delta" }
数据来源

选择或添加要由爬网程序扫描的数据源列表。

(可选)如果您选择JDBC作为数据源,则可以在指定存储JDBC驱动程序信息的 Connection 访问权限时使用自己的驱动程序。

包含路径

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

对于 Amazon S3 数据存储

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

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

对于 Delta Lake 数据存储

将一个或多个 Amazon S3 增量表路径指定为 s3://bucket/prefix/object.

适用于 Iceberg 或 Hudi 数据存储

将包含包含 Iceberg 或 Hudi 表元数据的文件夹的一个或多个 Amazon S3 路径指定为 s3://bucket/prefix.

对于 Iceberg 和 Hudi 数据存储,Iceberg/Hudi 文件夹可能位于根文件夹的子文件夹中。爬网程序将扫描路径下的所有文件夹,寻找 Hudi 文件夹。

对于JDBC数据存储

Enter <database>/<schema>/<table> 或者 <database>/<table>,视数据库产品而定。Oracle 数据库和我的数据库SQL不支持路径中的架构。你可以用百分比 (%) 字符代替 <schema> 或者 <table>。 例如,对于系统标识符 (SID) 为 Oracle 数据库orcl,请输入orcl/%以导入连接中指定用户有权访问的所有表。

重要

此字段区分大小写。

注意

如果您选择引入自己的JDBC驱动程序版本,AWS Glue 爬虫将在以下位置消耗资源 AWS Glue 任务和 Amazon S3 存储桶,以确保您提供的驱动程序在您的环境中运行。额外的资源使用量将反映在您的账户中。驱动程序仅限于添加中描述的属性 AWS Glue 连接

对于 MongoDB、MongoDB Atlas 或 Amazon DocumentDB 数据存储

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

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

最大遍历深度(仅适用于 Iceberg 或 Hudi 数据存储)

定义爬网程序可以遍历的最大 Amazon S3 路径深度,以发现 Amazon S3 路径中的 Iceberg 或 Hudi 元数据文件夹。此参数的目的是限制爬网程序的运行时间。默认值为 10;最大值为 20。

排除模式

您可以使用这些模式从爬取中排除某些文件或表。排除路径与包含路径是相对的。例如,要排除JDBC数据存储中的表,请在排除路径中键入表名。

Crawler 使用连接到JDBC数据存储 AWS Glue 包含连接字符串的JDBCURI连接。Crawler 只能使用数据库引擎中的JDBC用户名和密码访问数据库引擎中的对象 AWS Glue 连接。Crawler 只能创建它可以通过JDBC连接访问的表。Crawler 使用访问数据库引擎后 JDBCURI,将使用包含路径来确定数据库引擎中的哪些表是在数据目录中创建的。例如,使用 “我的”SQL,如果将包含路径指定为MyDatabase/%,则其中的所有表都将在MyDatabase数据目录中创建。访问 Amazon Redshift 时,如果您指定包含路径 MyDatabase/%,则数据库 MyDatabase 的所有架构中的所有表都是在数据目录中创建的。如果您指定包含路径 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* 匹配JDBC数据库中名称以开头的表Market,例如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 结尾的所有表
其他爬网程序源参数

每种源类型都需要一组不同的附加参数。

Connection

选择或添加 AWS Glue 连接。有关连接的信息,请参阅 连接到数据

其他元数据-可选(适用于JDBC数据存储)

选择爬网程序要爬取的其他元数据属性。

  • 注释:爬取相关的表级和列级注释。

  • 原始类型:在其他元数据中保留表列的原始数据类型。作为默认行为,爬网程序将原始数据类型转换为与 Hive 兼容的类型。

JDBC驱动程序类名-可选(适用于JDBC数据存储)

键入用于连接数据源的爬网程序的自定义JDBC驱动程序类名:

  • Postgres:org.postgresql.Driver

  • 我的SQL:com.mysql.jdbc.driver,com.mysql.cj.jdbc.driver

  • Redshift:com.amazon.redshift.jdbc.Driver, com.amazon.redshift.jdbc42.Driver

  • 甲骨文:oracle.jdbc.driver。 OracleDriver

  • SQL服务器:com.microsoft.sqlserver.jdbc。 SQLServerDriver

JDBC驱动程序 S3 路径-可选(用于JDBC数据存储)

选择 .jar 文件的现有 Amazon S3 路径。使用自定义JDBC驱动程序让 Crawler 连接到数据源时,.jar文件将存储在这里。

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

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

创建用于查询的表(仅适用于 Delta Lake 数据存储)

选择要如何创建 Delta Lake 表:

  • 创建原生表:允许与支持直接查询 Delta 事务日志的查询引擎集成。

  • 创建符号链接表:根据指定的配置参数,使用由由分区键分区的清单文件创建符号链接清单文件夹。

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

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

注意

对于 DynamoDB 数据存储,请设置预置容量模式来处理表的读写。C AWS Glue rawler 不应与按需容量模式一起使用。

网络连接-可选(适用于亚马逊 S3、Delta、Iceberg、Hudi 和目录目标数据存储)

可以包括一个用于此 Amazon S3 目标的网络连接。请注意,每个爬网程序仅限于一个网络连接,因此任何其他 Amazon S3 目标也将使用相同的连接(如果留空,则不使用任何连接)。

有关连接的信息,请参阅 连接到数据

仅对文件子集和样本大小进行采样(仅适用于 Amazon S3 数据存储)

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

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

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

随后爬网程序运行

此字段是影响所有 Amazon S3 数据源的全局字段。

  • 爬取所有子文件夹:在后续每次爬取时再次爬取所有文件夹。

  • 仅爬取新子文件夹:仅爬取上次爬取后添加的 Amazon S3 文件夹。如果架构兼容,则新分区将添加到现有表中。有关更多信息,请参阅 计划用于添加新分区的增量爬取

  • 基于事件爬取:依靠 Amazon S3 事件控制要爬取的文件夹。有关更多信息,请参阅 使用 Amazon S3 事件通知加速网络爬取

自定义分类器 — 可选

您可以先定义自定义分类器,然后再定义爬网程序。分类器检查爬网程序是否可以处理给定文件的格式。如果可以处理,分类器将以与该数据格式匹配的 StructType 对象的形式创建一个模式。

有关更多信息,请参阅 定义和管理分类器