AWS Glue 爬虫能够解析结构定义,但 Athena 无法正确读取

AWS Glue crawler able to parse the struct definition but Athena fails to read correctly

所以我们在 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.OpenCSVSerde SerDe,但仍然面临同样的问题。

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

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

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

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

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