微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

胶水 - 书签无法识别较新分区中的文件

如何解决胶水 - 书签无法识别较新分区中的文件

我有一个粘合作业,它从一个 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 结构为存储桶名称/yyyy/mm/dd/HH。上面显示书签设置在前缀 2021/04/20/16 处。

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

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

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

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

感谢阅读。

解决方法

这是因为在我们将其添加到 Athena 之前,glue 完全不知道更新的分区。我们可以修复该表,或者在较新的文件夹 ($$) 上再次运行 crawler,或者更改该表并添加一个分区。选项 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 修复此问题,因此我们无需对类似用例采取任何措施。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。