Athena执行INSERT INTO时字符串含单引号逗号报错如何解决
Athena INSERT语句单引号转义问题修复
问题复现
向存储格式为Parquet的Athena表database.product插入数据时,执行以下SQL触发报错:
insert into database.product (title,description) values ( 'Waxpol Vinyl & Leather Polish (35', Ltr.)', 'Restores with an extremely High & Durable Shine & Gloss.' )
报错截图如下:
根因分析
报错和字符串中的逗号无关,逗号在单引号包裹的字符串常量内属于合法字符,不会触发语法解析错误。
触发报错的核心原因是title字段值中35后面的单引号未做转义:Athena的SQL解析逻辑中,单个单引号是字符串常量的起止边界符,未转义的内部单引号会被引擎识别为字符串提前结束,后续的 Ltr.)'片段会被判定为非法语法,最终抛出解析错误。
修复方案
Athena标准SQL中,字符串内部的单引号需要用两个连续的单引号做转义,不要使用反斜杠转义(反斜杠转义在Athena标准SQL模式下不生效)。
修复后可正常执行的SQL如下:
insert into database.product (title,description) values ( 'Waxpol Vinyl & Leather Polish (35'', Ltr.)', 'Restores with an extremely High & Durable Shine & Gloss.' )
补充说明
- 该语法规则和表的底层Parquet存储格式没有关联,是Athena引擎解析SQL的通用要求
- 批量插入数据时如果字段内容存在大量单引号,建议优先使用参数化查询方式,避免手动转义出现遗漏
内容的提问来源于stack exchange,提问作者Rahul Diggi
相关产品推荐
相关产品推荐

