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

定义爬网程序

您可以使用爬网程序用表填充 AWS Glue 数据目录。这是大多数 AWS Glue 用户使用的主要方法。爬网程序可以在单次运行中爬取多个数据存储。完成后,爬网程序会在 Data Catalog 中创建或更新一个或多个表。您在 AWS Glue 中定义的提取、转换和加载 (ETL) 作业使用这些 Data Catalog 表作为源和目标。ETL 作业从在源和目标 Data Catalog 表中指定的数据存储中读取内容并向其中写入内容。

有关使用 AWS Glue 控制台添加爬网程序的更多信息,请参阅在 AWS Glue 控制台上使用爬网程序

我可以爬取哪些数据存储?

爬网程序可以同时爬取基于文件的数据存储和基于表的数据存储。

爬网程序还可通过其各自的本机接口爬取以下数据存储:

  • Amazon Simple Storage Service (Amazon S3)

  • Amazon DynamoDB

爬网程序还可通过 JDBC 连接爬取以下数据存储:

  • Amazon Redshift

  • Amazon Relational Database Service (Amazon RDS)

    • Amazon Aurora

    • Microsoft SQL Server

    • MySQL

    • Oracle

    • PostgreSQL

  • 可公开访问的数据库

    • Aurora

    • Microsoft SQL Server

    • MySQL

    • Oracle

    • PostgreSQL

注意

目前,AWS Glue 不支持数据流的爬网程序。

对于 Amazon S3 和 Amazon DynamoDB,爬网程序使用 AWS Identity and Access Management (IAM) 权限角色来访问您的数据存储 。传递给爬网程序的角色必须有权访问所爬取的 Amazon S3 路径和 Amazon DynamoDB 表。对于 JDBC 连接,爬网程序使用用户名和密码凭证。有关更多信息,请参阅在 AWS Glue Data Catalog 中定义连接

当您定义要网络爬取的 Amazon S3 数据存储时,可以选择是在您的账户中还是在其他账户中网络爬取路径。爬网程序的输出由在 AWS Glue 数据目录 中定义的一个或多个元数据表组成。将为在数据存储中找到的一个或多个文件创建一个表。如果文件夹中的所有 Amazon S3 文件具有相同的架构,爬网程序会创建一个表。此外,如果对 Amazon S3 对象进行分区,则只会创建一个元数据表。

如果正在网络爬取的数据存储是关系数据库,则输出也是在 AWS Glue 数据目录 中定义的一组元数据表。在网络爬取关系数据库时,必须为连接提供授权凭证,以读取数据库引擎中的对象。根据数据库引擎的类型,您可以选择要爬网哪些对象,如数据库、架构和表。

如果要爬网的数据存储是一个或多个 Amazon DynamoDB 表,则输出是 AWS Glue 数据目录中的一个或多个元数据表。在使用 AWS Glue 控制台定义爬网程序时,请指定 DynamoDB 表。如果您使用的是 AWS Glue API,请指定表的列表。

爬网程序运行时会出现什么情况?

爬网程序在运行时,会执行以下操作来询问数据存储:

  • 对数据分类,以确定原始数据的格式、架构和关联属性 – 您可以通过创建自定义分类器来配置分类结果。

  • 将数据分组,至于表或分区中 – 根据爬网程序探试算法对数据分组。

  • 将元数据写入 Data Catalog – 您可以配置爬网程序如何添加、更新和删除表和分区。

爬网程序创建的元数据表包含在定义爬网程序时的数据库中。如果爬网程序未定义数据库,则您的表将放置在默认数据库中。此外,每个表都有一个分类列,由第一个成功识别数据存储的分类器填充。

如果已爬取的文件被压缩,则爬网程序必须下载它才能处理它。在爬网程序运行时,它会询问文件以确定其格式和压缩类型,并将这些属性写入 Data Catalog。某些文件格式(例如 Apache Parquet)允许您在写入文件时压缩文件的一部分。对于这些文件,压缩的数据是文件的内部组件,在将表写入 Data Catalog 时,AWS Glue 不会填充 compressionType 属性。相反,如果整个文件通过压缩算法(例如 gzip)来压缩,则在将表写入 Data Catalog 时,会填充 compressionType 属性。

爬网程序为它创建的表生成名称。存储在 AWS Glue 数据目录中的表的名称遵循以下规则:

  • 仅允许使用字母数字字符和下划线 (_)。

  • 任何自定义前缀均不能超过 64 个字符。

  • 名称的最大长度不能超过 128 个字符。爬网程序截断生成的名称以适应限制范围。

  • 如果遇到重复的表名,则爬网程序会向名称中添加哈希字符串后缀。

如果您的爬网程序多次运行 (也许是按计划),它会在您的数据存储中查找新的或已更改的文件或表。爬网程序的输出包括自上次运行以来找到的新表和分区。

爬网程序如何确定何时创建分区?

当 AWS Glue 爬网程序扫描 Amazon S3 并检测存储桶中的多个文件时,它会在文件夹结构中确定表的根,以及哪些文件夹是表的分区。表的名称基于 Amazon S3 前缀或文件夹名称。您提供一个包含路径,它指向要爬网的文件夹级别。当某个文件夹级别的大部分架构都相似时,爬网程序将创建一个表而不是两个独立表的分区。要影响爬网程序,以创建单独的表,可在定义爬网程序时将每个表的根文件夹添加为单独的数据存储。

例如,对于以下 Amazon S3 结构:

s3://bucket01/folder1/table1/partition1/file.txt s3://bucket01/folder1/table1/partition2/file.txt s3://bucket01/folder1/table1/partition3/file.txt s3://bucket01/folder1/table2/partition4/file.txt s3://bucket01/folder1/table2/partition5/file.txt

如果 table1table2 的架构相似,并且在爬网程序中通过包含路径 s3://bucket01/folder1/ 定义了单个数据存储,爬网程序将创建一个具有两个分区列的表。一个分区列包含 table1table2,另一个分区列包含 partition1partition5。要创建两个单独的表,可用两个数据存储来定义爬网程序。在本示例中,将第一个包含路径定义为 s3://bucket01/folder1/table1/,将第二个定义为 s3://bucket01/folder1/table2

注意

在 Amazon Athena 中,每个表对应一个 Amazon S3 前缀,所有对象都在其中。如果对象具有不同架构,Athena 则不会将同一前缀内的不同对象识别为不同的表。如果爬网程序从同一个 Amazon S3 前缀中创建多个表,则可能出现这种情况。这可能会导致 Athena 中的查询返回零个结果。为使 Athena 正确识别和查询表,请在创建爬网程序时,使 Amazon S3 文件夹结构中的每个不同的表架构具有单独的包含路径。有关更多信息,请参阅将 Athena 与 AWS Glue 一起使用时的最佳实践以及这篇 AWS 知识中心文章