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

创建含结构体数组列的AWS Athena Parquet表遇语法错误求助

解决AWS Athena创建嵌套数组结构体Parquet表的语法错误

我来帮你搞定这个问题——你遇到的报错完全是因为Athena(底层基于Presto引擎)的嵌套类型语法和Spark/Hive的写法不兼容导致的,看起来合法的语法其实不符合Athena的SQL规范。

问题分析

先看你原建表语句里的关键错误点:

foo array< struct< bar: int, bam: int > >

Spark和Hive用尖括号<>来定义数组、结构体这类泛型类型,但Athena遵循Presto SQL的语法规则,不支持尖括号包裹类型定义,而是要求用圆括号()来替代,结构体的声明方式也需要对应调整。

修正后的建表语句

把嵌套类型的写法改成Athena兼容的形式即可,以下是修正后的完整语句:

create table "db"."fufu" ( 
  foo array( struct( bar: int, bam: int ) ) 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ('serialization.format' = '1') 
LOCATION 's3://yada/yada/' 
TBLPROPERTIES ('has_encrypted_data'='false');

额外说明

虽然Spark和Athena都能处理Parquet文件,但二者的SQL语法在嵌套类型声明上有明显差异:

  • Spark/Hive:用<>指定泛型参数,比如array<struct<...>>
  • Athena(Presto):用()包裹元素/字段定义,比如array(struct(...))

因为你的Parquet文件本身元数据是正确的(Spark可以正常读取),修改语法后Athena就能正确解析并创建表了。

内容的提问来源于stack exchange,提问作者Little Bobby Tables

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:46