如何在 aws athena 中查询 struct<$oid:string>



我想查询存储在MongoDB中并导出为许多JSON文件的数据,存储在S3

我使用AWS Glue将文件读取到Athena,但是每个表上id的数据类型被导入为struct<$oid:string>

我尝试了各种在字段周围添加引号的方法,但都没有成功。所有我尝试导致错误name expected at the position 7 of 'struct<$oid:string>' but '$' is found.

我是否可以以当前形式读取这些表,或者我是否需要在Glue中声明它们的类型?

Glue Crawlers创建与它们找到的匹配的模式,而不考虑它们是否适合使用,例如Athena。在雅典娜你不能有一个初始的$结构属性,但胶水没有考虑到这一点-部分原因是因为也许你会使用表与其他东西,这不是一个问题,部分原因是它还能做什么,那是属性的名称。

有两种方法,但也不工作如果你继续使用履带。您将需要修改表模式,但如果您继续运行爬虫,它将再次将其恢复。

第一个,可能是最简单的选项,是将列的类型更改为STRING,然后在查询时使用JSON函数使用JSONPath提取值($是JSONPath中的一个特殊字符,但您应该能够转义它)。

第二个选项是使用"mapping "Hive JSON服务器的特性。我不能百分百确定它是否适用于这个案子,但值得一试。不幸的是,文档并没有详细说明如何配置它。

最新更新