我们有一些管道分隔的.txt报告进入 S3 中的一个文件夹,我们在其上运行 Glue 爬网程序以确定 Athena 中的架构和查询。
报表的格式最近发生了变化,因此中间有两个新列。
旧文件:
Columns A B C D E F
Data a1 b1 c1 d1 e1 f1
带有额外"G"和"H"列的新文件:
Columns A B G H C D E F
Data a2 b2 g2 h2 c2 d2 e2 f2
我们在爬虫创建的表中得到什么,如雅典娜所示:
Columns A B C D E F G H <- Puts new columns at the end. OK
Data a1 b1 c1 d1 e1 f1 <- Correct for old data
Data a2 b2 g2 h2 e2 f2 <- 4 columns incorrect and 2 missing
这是胶水爬虫中的某种错误,还是有办法对其进行配置,以便将正确的数据放在正确的列中(除了运行数据清理脚本来转换输入文件(?
我认为这是胶水过度承诺和交付不足的另一个案例。只要数据格式是分隔文本,如果在中间添加列,Glue 就会做错事。在末尾添加或删除(但不是两个(列有效,但不在中间。Athena 不支持不同分区的不同列,因此 Glue 无法完成这项工作——但它使它看起来像可以。
您要么必须重写数据,更改为最后添加列,要么切换到其他数据格式,其中文件包含足够的元数据,以免成为问题:JSON、Avro 或 Parquet。
我建议您完全停止使用Glue爬虫,它看起来像是一个通用工具,但实际上解决的用例很少。有关如何操作的一些建议,请参阅 https://stackoverflow.com/a/56439429/1109。