跳至内容

AWS Glue 爬网程序如何检测架构?

1 分钟阅读
0

当我运行 AWS Glue 爬网程序时,爬网程序会使用相似的架构创建多个表。我想知道爬网程序如何检测架构。

解决方法

爬网程序中的架构检测

在爬网程序首次运行期间,爬网程序会读取前 1,000 条记录或每个文件的前一兆字节来推断架构。爬网程序读取的数据量取决于文件格式和有效记录的可用性。例如,如果输入文件是 JSON 文件,则爬网程序会读取该文件的前 1MB 来推断架构。

如果爬网程序在文件的前 1MB 内读取到有效记录,则爬网程序会推断出架构。如果爬网程序在读取 1MB 之后仍无法推断出架构,则会继续以 1MB 为增量读取最多 10MB 的文件。

对于 CSV 文件,爬网程序会读取前 1000 条记录或前 1MB 的数据,以先到者为准。对于 Parquet 文件,爬网程序直接从文件中推断架构。爬网程序会将从所有子文件夹和文件中推断出的架构进行比较,然后创建一个或多个表。

当爬网程序创建表时,爬网程序会检查以下因素:

  • 检查数据是否具有相同的格式、压缩类型和包含路径
  • 架构的分区阈值有多相似和不同架构的数量

要让爬网程序判定架构相似,必须满足以下条件:

  • 分区阈值高于 0.7 (70%)。
  • 不同架构(在此上下文中也称为“集群”)的最大数量不超过五。

爬网程序在文件夹级别推断架构,并会比较所有文件夹的架构。如果比较的架构匹配的分区阈值高于 70%,则爬网程序会将这些架构表示为表的分区。如果不匹配,则爬网程序会为每个文件夹创建一个表,这会导致表数量增多。

示例场景

示例 1

在以下示例中,文件夹 DOC-EXAMPLE-FOLDER1 有 10 个文件,其中八个文件的架构为 SCH_A,两个文件的架构为 SCH_B

文件与以下示例类似:

SHC_A:

{ "id": 1, "first_name": "John", "last_name": "Doe"}{ "id": 2, "first_name": "Li", "last_name": "Juan"}

SCH_B:

{"city":"Dublin","country":"Ireland"}{"city":
"Paris","country":"France"}

当爬网程序爬取 Amazon Simple Storage Service (Amazon S3) 路径 s3://DOC-EXAMPLE-FOLDER1 时,爬网程序会创建一个表。该表包含架构 SCH_ASCH_B 的列。这是因为路径中 80% 的文件属于 SCH_A 架构,而 20% 的文件属于 SCH_B 架构。因此,该架构符合分区阈值。此外,不同架构的数量不超过集群的数量,架构也不会超过集群大小限制。

示例 2

在以下示例中,文件夹 DOC-EXAMPLE-FOLDER2 有 10 个文件,其中七个文件的架构为 SCH_A,三个文件的架构为 SCH_B

当爬网程序爬取 Amazon S3 路径 s3://DOC-EXAMPLE-FOLDER2 时,爬网程序会为每个文件创建一个表。这是因为 70% 的文件属于架构 SCH_A,而 30% 的文件属于架构 SCH_B。因此,该架构未达到分区阈值。

注意: 要获取有关这些表的信息,请查看 Amazon CloudWatch 中的爬网程序日志。

爬网程序选项

在自定义爬网程序行为时,您可以选择以下选项之一:

相关信息

Using crawlers to populate the Data Catalog(使用爬网程序填充 Data Catalog)

Customizing crawler behavior(自定义爬网程序行为)

Defining and managing classifiers(定义和管理分类器)

AWS 官方已更新 7 个月前