【问题标题】:How can I query at struct<$oid:string> in aws athena如何在 aws athena 中的 struct<$oid:string> 处查询
【发布时间】:2021-11-28 08:56:20
【问题描述】:

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

我正在使用 AWS Glue 将文件读入 Athena,但是每个表上 id 的数据类型导入为 struct&lt;$oid:string&gt;

我尝试了在字段周围添加引号的各种变体,但没有成功。我尝试的一切都会导致错误name expected at the position 7 of 'struct&lt;$oid:string&gt;' but '$' is found.

有什么方法可以读取这些表格的当前形式,还是需要在 Glue 中声明它们的类型?

【问题讨论】:

    标签: sql mongodb amazon-s3 aws-glue amazon-athena


    【解决方案1】:

    Glue Crawler 创建与他们找到的内容相匹配的架构,而不考虑它们是否可以使用,例如 Athena。在 Athena 中,你不能有一个带有初始 $ 的结构属性,但 Glue 没有考虑到这一点——部分原因是你可能会将表与其他不成问题的东西一起使用,部分原因是什么别的能行吗,就是属性的名字。

    有两种解决方法,但如果您继续使用爬虫,这两种方法都行不通。您将需要修改表架构,但如果您继续运行爬虫,它只会再次将其还原。

    第一个也是最简单的选择是将列的类型更改为STRING,然后在查询时使用JSON function 使用JSONPath 提取值($ 是 JSONPath 中的一个特殊字符,但你应该能够逃脱它)。

    第二个选项是使用"mappings" feature of the Hive JSON serde。我不能 100% 确定它是否适用于这种情况,但值得一试。不幸的是,文档并没有很详细地介绍如何配置它。

    【讨论】:

    • 感谢您的回复,我们似乎越来越需要从源头更改架构
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2020-09-12
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多