爬网程序如何确定何时创建分区? - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

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

例如,考虑以下 Amazon S3 文件夹结构。


          多个级别的矩形表示 Amazon S3 中的文件夹层次结构。顶部矩形标记为 “销售额”。下面的矩形标记为年份 =2019。下面的两个矩形标记为月 =JAN 和月 =2 月。每个矩形下面都有两个矩形,标记为天 =1 和天 =2。所有四个 “日”(底部)矩形下面有两个或四个文件。所有矩形和文件都与线相连。

四个最低级别文件夹的路径如下:

S3://sales/year=2019/month=Jan/day=1 S3://sales/year=2019/month=Jan/day=2 S3://sales/year=2019/month=Feb/day=1 S3://sales/year=2019/month=Feb/day=2

假定爬网目标设置为Sales中的所有文件都是在day=n文件夹具有相同的格式(例如 JSON,未加密),并且具有相同或非常相似的模式。Crawler 将创建一个包含四个分区的表,其中包含分区键yearmonth, 和day

在下一个示例中,考虑以下 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/时,Crawler 会创建一个包含两个分区键列的表。第一个分区键列包含table1table2,第二个分区键列包含partition1通过partition3(对于 )table1分区和partition4partition5(对于 )table2分区。要创建两个单独的表,可用两个数据存储来定义爬网程序。在本示例中,将第一个包含路径定义为 s3://bucket01/folder1/table1/,将第二个定义为 s3://bucket01/folder1/table2

注意

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