首页 > 解决方案 > Glue - 书签无法识别较新分区中的文件

问题描述

我有一个从 S3 存储桶读取的粘合作业进行转换并将结果上传到另一个 S3 存储桶。

这是我的aws glue get-job-bookmark --job-name xx回报

JobBookmark": "{\"datasource0\":{\"jsonClass\":\"HadoopDataSourceJobBookmarkState\",\"timestamps\":{\"RUN\":\"4\",\"HIGH_BAND\":\"900000\",\"CURR_LATEST_PARTITION\":\"1618957000000\",\"CURR_LATEST_PARTITIONS\":\"s3://XXYY/2021/04/20/16/\",\"CURR_RUN_START_TIME\":\"2021-04-20T22:43:19.304Z\",\"INCLUDE_LIST\":\"\"}}}"

如您所见,我的 S3 结构为 bucketname/yyyy/mm/dd/HH。以上显示书签设置在前缀 2021/04/20/16 处。

现在,如果以相同的确切前缀添加另一个文件,则会对其进行处理。

但是,如果有一个较新的分区,例如 2021/04/20/17 并且其中有一个文件 - 它不会被书签拾取。

我的脚本非常简单,大部分都是自动生成的,因为我只是在测试这个功能。

我的表的位置在最顶层指定为 S3://xxyy。

谢谢阅读。

标签: amazon-web-servicesamazon-s3aws-glueaws-glue-data-catalogaws-glue-spark

解决方案


这是因为在我们将其添加到 Athena 之前,胶水很高兴地不知道新的分区。我们可以修复表,或者在较新的文件夹 ($$) 上再次运行爬虫,或者更改表并添加分区。选项 3 最适合不经常更改的模式。

alter table xxyy
add partition (partition_0=2021,partition_1=04,partition_2=21,partition_3=22)
location 's3://xxyy/2021/04/21/22/'

最好的部分是我们可以用更新的分区“预填充”表,即使这样的分区在 S3 中还不存在。

但这有点违反直觉。希望 AWS 能解决这个问题,所以我们不需要对类似的用例采取任何行动。


推荐阅读