如何防止 AWS Glue 爬网程序创建多个表?

上次更新日期:2021年 7 月 30 日

为什么 AWS Glue 爬网程序使用我的源数据创建了多个表,要如何避免这种情况?

简短描述

当您源数据文件的以下特征不同时,AWS Glue 爬网程序会创建多个表:

  • 格式(如 CSV、Parquet 或 JSON)
  • 压缩类型(如 SNAPPY、gzip 或 bzip2)
  • 架构
  • Amazon Simple Storage Service (Amazon S3) 分区架构

解决方案

查看爬网程序日志

检查爬网程序日志以识别导致爬网程序创建多个表的文件:

1.    打开 AWS Glue 控制台

2.    在导航窗格中,选择爬网程序

3.    选择爬网程序,然后选择日志链接可查看 Amazon CloudWatch 控制台上的日志。

4.    如果 AWS Glue 在爬网程序上次运行时创建了多个表,则日志会包含类似以下内容的条目:

[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_24cab769_750d_4ef0_9663_0cc6228ac858_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_3518b196_caf5_481f_ba4f_3e968cbbdd67_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_6d2fffc2_a893_4531_89fa_72c6224bb2d6_c000_snappy_parquet in
 database glue

日志条目包括导致爬网程序创建多个表的文件的名称。

防止创建多个表

要防止创建多个表,请考虑以下一个或多个解决方案选项:

  • 确认所有数据文件使用相同的架构、格式和压缩类型。如果某些文件使用不同的架构(例如,模式 A 表示此字段 X 是 INT 类型,架构 B 表示此字段 X 是 BOOL 类型),您可以执行以下任一操作:
    • 运行 AWS Glue 提取、转换和加载 (ETL) 作业以使用 from_options 函数读取异常值数据。然后,在您的资源中将异常值数据类型转换为正确的或最常见的数据类型。
    • 使用 Amazon Athena 通过现有表 DDL 手动创建表。然后,运行 AWS Glue 爬网程序以使用从表格中沿用架构的爬网程序设置来更新表元数据。
  • 如果您的数据在一些输入文件中有不同的架构,而在其他一些输入文件中有类似的架构,则您可以在创建爬网程序时合并兼容的架构。在 Configure the crawler's output(配置爬网程序输出)页面上的 Grouping behavior for S3 data (optional)(S3 数据的分组行为(可选))下,选择Create a single schema for each S3 path(为各 S3 路径创建单独架构)。如果激活了该设置,且数据兼容,在指定包含路径中评估 Amazon S3 对象时,爬网程序将忽略具体架构的相似性。有关更多信息,请参阅如何为各 Amazon S3 包含路径创建单独架构
  • 如果您的输入文件具有不同的 Amazon S3 结构/路径,则爬网程序会创建多个表。例如,假设爬网程序抓取的 S3 路径 s3://doc-example-bucket/doc-example-key/doc-example-table 具有的分区结构与以下类似:
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-20/doc-example-file1.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-21/dox-example-file2.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-22/doc-example-file3.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dox-example-file4.csv
    s3:// doc-example-bucket/doc-example-key/doc-example-table/doc-example-file5.csv
    然后,由于分区结构不一致,爬网程序会创建多个表。
    为了避免此问题,您可以执行以下操作:
    • 以手动或编程方式使架构保持一致。在给定的示例中,您可以删除不具有 dt=xxxx-xx-xx 分区的 s3 文件,也可以为文件 doc-example-file4.csvdoc-example-file5.csv 添加分区。
    • 使用排除模式跳过任何不需要的文件或文件夹。
  • 当使用 CSV 数据时,请确保您使用的标头一致。如果您的某些文件具有标头而另一些没有,则爬网程序会创建多个表。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?