AWS Athena创建外部表报错:mismatched input 'EXTERNAL'
解决AWS Athena创建外部表的语法错误问题
你遇到的报错核心原因是Athena采用的Presto/Trino语法与传统HiveQL的关键字位置差异,EXTERNAL的放置位置不符合Athena的语法规范,同时原语句还存在分区列重复定义的问题,以下是修正方案:
修正后的建表语句
CREATE TABLE test EXTERNAL ( "timestamp" timestamp , "start" timestamp , "end" timestamp , "recipe" string , "transient_duration" double , "1st_regime_1n" double , "1st_regime_2" double , "1st_regime_3" double , "index" timestamp ) PARTITIONED BY ("date" date) STORED AS PARQUET LOCATION 's3://somewhere/somefolder'
关键修正说明
- 调整
EXTERNAL关键字位置:Athena要求EXTERNAL放在CREATE TABLE [表名]之后,而非CREATE之后,这是和HiveQL的核心区别之一。 - 移除重复的
date列定义:分区列"date"不需要在表的字段列表中重复声明,否则会引发字段冲突,Athena会自动将分区列作为表的虚拟字段处理。 - 保留保留字的双引号包裹:
timestamp、index、date均为Athena的保留字,必须用双引号包裹才能作为列名使用,无需修改这部分。 - 保持显式列类型声明:继续保留所有字段的类型指定,避免
transient_duration被错误识别为bigint。
后续操作
建表完成后,如果S3路径下已经存在按date分区的文件夹(如date=2024-05-20/),需要执行以下语句加载分区数据:
MSCK REPAIR TABLE test;
内容的提问来源于stack exchange,提问作者Martino Quaglia
相关产品推荐
相关产品推荐

