首页 > 解决方案 > AWS Glue 爬虫能够解析结构定义,但 Athena 无法正确读取

问题描述

因此,我们在 S3 存储桶中有 CSV 文件,当 AWS Glue 爬虫爬取所有文件时,它能够正确识别结构字段的架构,如下所示:

struct<installation_id:string,device_id:string>

CSV文件内容如下:

publisher_parameters
"{""installation_id"":""a86f3071-e271-4979-8096-d501b8645c7e"",""device_id"":""864006043285537""}"
"{""installation_id"":""3d3a964e-e78f-428b-93cd-1ddfec1fb6d6"",""device_id"":""e9fe5f395a5a4e67""}"

但是,当我使用 AWS Athena 阅读时,它会将整个字符串作为installation_id我们结构中的值来读取。我也尝试过使用org.apache.hadoop.hive.serde2.OpenCSVSerdeSerDe,但仍然面临同样的问题。

在爬取文件时,AWS Glue 是否使用与表规范中提供的不同的 SerDe?

标签: aws-glueamazon-athenahive-serde

解决方案


Glue 倾向于创建不适用于 Athena 的表格,这只是另一个示例。

OpenCSVSerde 不支持复杂类型,因此无法正常工作。为什么 Glue 这样做是任何人的猜测。

LazySimpleSerDe 对复杂类型有一些支持,但它们的编码方式需要与您的数据不同。

我的建议是完全停止使用 Glue 爬虫并手动创建表并将string其用作publisher_parameters列的类型,然后在查询时使用 JSON 函数对其进行解析。据我所知,没有办法让任何 Athena CSV serde 将该数据解析为结构。


推荐阅读