我的 AWS Glue 爬网程序不向表中添加新分区。
简短描述
AWS Glue 会将 Amazon Simple Storage Service (Amazon S3) 路径中分区名称、序列或数量的差异视为分区架构或结构的更改。爬网程序会扫描新分区下的源数据文件,并将源文件的以下属性与现有表的属性进行比较:
- 文件格式
- 压缩类型
- 架构
- Amazon S3 分区的结构
如果这些分区属性中的任何一个与表属性不同,则 AWS Glue 会跳过该分区且不更新元数据。
解决方法
对问题进行故障排除
要检查爬网程序日志以确定问题,请完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择 Crawlers(爬网程序)。
- 选择爬网程序,然后选择 Logs(日志),以在 Amazon CloudWatch 控制台上查看日志。
- 查看日志,检查爬网程序是否跳过了新分区。
例如,假设日志中包含类似于以下内容的条目:
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
如果您看到类似的日志,请将这些表位置的架构和分区结构与原始表的架构和分区结构进行比较。
解决此问题
更新分区结构
如果问题是由分区结构不一致导致的,请手动或以编程方式重命名结构使其一致。
排除特定文件
AWS Glue 可能会由于以下原因之一跳过分区:
如果 AWS Glue 由于上述原因之一跳过了分区,且表中不需要这些数据,请完成以下操作之一:
- 使用排除模式跳过任何不需要的文件。有关详细信息,请参阅选择数据来源和分类器。
- 将不需要的文件移到其他位置。
合并兼容的架构
如果您的数据在不同的输入文件中有类似的架构,请在创建爬网程序时合并兼容的架构。在 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 爬网程序运行期间创建多个表?