aws-glue - 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.OpenCSVSerde
SerDe,但仍然面临同样的问题。
在爬取文件时,AWS Glue 是否使用与表规范中提供的不同的 SerDe?
解决方案
Glue 倾向于创建不适用于 Athena 的表格,这只是另一个示例。
OpenCSVSerde 不支持复杂类型,因此无法正常工作。为什么 Glue 这样做是任何人的猜测。
LazySimpleSerDe 对复杂类型有一些支持,但它们的编码方式需要与您的数据不同。
我的建议是完全停止使用 Glue 爬虫并手动创建表并将string
其用作publisher_parameters
列的类型,然后在查询时使用 JSON 函数对其进行解析。据我所知,没有办法让任何 Athena CSV serde 将该数据解析为结构。
推荐阅读
- django - 如何将 Pug/Jade 与 Django 条件和 html 元素属性混合?
- c# - 将 json 字符串写入一个 .csv 列
- delphi - Delphi - 如何实现自定义超时
- react-native - 如何将菜单列表从 API 传递给 Custom DrawerNavigator?
- media - Hoy 为 Xenforo 中的某些媒体类别添加 noindex 标签
- javascript - 当点不显示时如何将菜单按钮转换为白色?
- node.js - 带有节点 XADD 的 Redis 流
- c++ - 如何使用 mingw-w64 构建具有链接时间优化的 Qt?
- xml - 检索添加到项目的自定义字段中的值列表
- java - 使用 Spring Boot 禁用 AppClassLoader AspectJ 日志记录