当输入数据格式更改时,Athena 将数据放入不正确的列中



我们有一些管道分隔的.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。

最新更新