使用S3 Bucket中CSV文件在AWS Athena创建表时遇语法错误
问题分析与解决
错误原因
你遇到的报错mismatched input 'ROW'. Expecting: 'COMMENT', 'WITH', <EOF>,是因为当前Athena默认使用ANSI SQL解析模式,该模式不兼容Hive风格的ROW FORMAT语法;同时你用双引号包裹数据库和表名的写法,会触发ANSI模式解析,导致后续Hive语法关键字无法被识别。
两种解决方法
方法1:改用Athena原生ANSI SQL语法建表
这种写法更贴合Athena的原生支持,无需依赖Hive SerDe:
CREATE TABLE IF NOT EXISTS "database"."tablename" ( column1 INT, column2 INT, column3 INT ) WITH ( external_location = 's3://s3-path/', format = 'csv', field_delimiter = ',' );
方法2:兼容Hive语法(移除标识符双引号)
如果要继续使用Hive风格的SerDe语法,只需去掉数据库和表名的双引号(Athena默认不区分大小写,小写标识符无需引号),解析器会自动切换到Hive兼容模式:
CREATE TABLE IF NOT EXISTS database.tablename ( column1 INT, column2 INT, column3 INT ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim' = ',') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://s3-path/' TBLPROPERTIES ('classification' = 'csv');
额外提示
- 若数据库或表名包含特殊字符、空格或大写字母,必须保留双引号,此时只能使用方法1的ANSI语法。
- 建表前确认Athena服务角色拥有目标S3路径的读写权限。
内容的提问来源于stack exchange,提问作者Rishabh Goel
相关产品推荐
相关产品推荐

