amazon-web-services - 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。
谢谢阅读。
解决方案
这是因为在我们将其添加到 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 能解决这个问题,所以我们不需要对类似的用例采取任何行动。
推荐阅读
- c# - 如何向 MySql Connector/NET 添加自定义 SSL 验证
- sql - Codeigniter 活动记录插入返回值
- java - RESOURCE_EXHAUSTED 池中没有可用的会话
- python - 如何使用列表来避免一遍又一遍地重复“和/或”运算符?
- vue.js - 我无法理解 vue.js 的 scopedSlots
- android - SwipeDismissTouchListener 在 Swipe 后调用 onClickListener
- dns - 从 VM 上的来宾 DNS 服务器解析主机 dns 查询
- android - Android SQLiteDiskIOException(代码 522 SQLITE_IOERR_SHORT_READ)
- c# - 反应迟钝——具有多个变量C#的for循环中的运算符
- java - 如何使用具有继承的类对象