为什么我的 AWS Glue 爬虫程序没有向表中添加新的分区?

1 分钟阅读
0

我的 AWS Glue 爬虫程序不会向表中添加新分区。

简短描述

当爬虫程序在新分区下扫描源数据文件时,它会将源文件的以下属性与现有表的属性进行比较:

  • 文件格式
  • 压缩类型
  • 架构
  • Amazon Simple Storage Service (Amazon S3) 分区架构

如果分区的任何属性与表的属性不同,则会跳过分区而不是添加到元数据中。Amazon S3 路径中分区名称、序列或数量的差异被视为分区架构或结构的更改。

解决方法

排查问题

检查爬虫程序日志以确定问题:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择爬虫程序
  3. 选择爬虫程序,然后选择日志链接可查看 Amazon CloudWatch 控制台上的日志。
  4. 查看日志以检查爬虫程序是否跳过了新分区。

例如,假设日志中包含的条目类似于以下内容:

Folder partition keys do not match table partition keys, skipped folder: doc-example-bucket/doc-example-path/doc-example-table/year=2021/month=01/sday=05/

此条目表明 Amazon S3 位置的分区结构与为表定义的分区密钥不匹配。当表源位置的分区结构不一致时,可能会发生这种情况。

如果 AWS Glue 爬虫程序创建了多个表,则日志条目类似于以下内容:

INFO : Created table doc-example-table in database doxtest_db

如果看到类似的日志,请将这些表位置的架构和分区结构与原始表的模式和分区结构进行比较。

解决问题

根据 CloudWatch Logs 中的信息,考虑以下一个或多个解决方案选项:

  • 如果问题是由不一致的分区结构引起的,那么通过手动或编程方式重命名 S3 路径来使结构保持一致。
  • 如果由于文件格式、压缩格式或架构不匹配而跳过分区,并且不需要将数据包含在预期表中,则请考虑以下事项:
  • 使用排除模式跳过任何不需要的文件。
  • 将不需要的文件移动到其他位置。
  • 如果您的数据在一些输入文件中有不同的架构,而在其他一些输入文件中有类似的架构,则您可以在创建时合并兼容的架构。在 Configure the crawler's output(配置爬网程序输出)页面上的 Grouping behavior for S3 data (optional)(S3 数据的分组行为(可选))下,选择Create a single schema for each S3 path(为各 S3 路径创建单独架构)。如果激活了该设置,且数据兼容,在指定包含路径中评估 S3 对象时,爬虫程序将忽略具体架构的相似性。有关更多信息,请参阅如何为各 Amazon S3 包含路径创建单独架构
  • 如果爬虫程序正在创建多个表,请参阅如何阻止 AWS Glue 爬虫程序创建多个表?

AWS 官方
AWS 官方已更新 3 年前