You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Athena中如何查询struct<$oid:string>类型的字段?

问题原因

Athena底层依赖的Hive DDL语法不支持结构体内部的字段名以$开头,你遇到的报错就是因为自动生成的struct结构里包含$oid字段,不符合语法规范导致的。

可行解决方案

方案1:修改Glue表定义(推荐,长期使用最优)

  • 无需修改S3上的原始JSON文件,直接在Glue数据目录中调整对应表的字段配置即可
    1. 进入AWS Glue控制台,找到「数据目录」-「表」,定位到你要查询的表
    2. 点击编辑表结构,找到id/_id字段,把原有的struct<$oid:string>类型改为string,保存修改
    3. 直接在Athena中查询,返回的id值就是原$oid对应的字符串内容
  • 如果是用Glue Crawler自动爬取生成的表,可以给Crawler新增自定义JSON分类器,配置匹配规则直接把_id.$oid映射为string类型的id字段,后续爬取就不会再生成带$的非法struct结构

方案2:临时查询无需改表,直接用JSON函数解析

如果只是临时查询不想修改表结构,可以直接通过Athena的JSON解析函数提取值:

-- 路径根据你实际的JSON结构调整即可,如果_id是顶层字段则路径为'$._id.$oid'
SELECT json_extract_scalar(raw_json_line, '$._id.$oid') AS id, other_fields
FROM your_table_name

该方案查询性能低于提前配置好表结构的方案,仅适合临时查询场景。

内容的提问来源于stack exchange,提问作者Jay Ramsay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:15:03