使用sql-to-mongo-db-query-converter转换含连字符集合名的SQL报错如何解决
解决方法
1 优先使用双引号同时包裹库名和集合名
你之前只对库名做了双引号包裹,带连字符的集合名属于含特殊字符的非标准标识符,同样需要用双引号单独包裹,正确SQL写法如下:
select * from "test-schema"."test-collection";
该写法会让转换器将两段带连字符的名称识别为完整的标识符,不会错误把连字符解析为减号运算符,大部分场景下可以直接解决转换异常问题。
2 异常场景备选方案
如果上述写法依旧无法满足转换需求,可以选择以下两种方案规避解析问题:
- 调用工具的Java API手动指定库和集合名称,跳过SQL解析阶段的标识符校验,示例逻辑如下:
SQLToMongoConverter converter = new SQLToMongoConverter(); // 手动指定带连字符的库名和集合名 converter.setDatabaseName("test-schema"); converter.setCollectionName("test-collection"); // SQL语句里使用无特殊字符的占位集合名即可 Query mongoQuery = converter.convert("select * from temp_collection");
- 转换前做字符串预处理:将SQL语句中的带连字符的库/集合名替换为无特殊字符的占位符,转换得到Mongo查询语句后,再将查询中的占位符替换回真实的库/集合名,适合批量处理场景。
内容的提问来源于stack exchange,提问作者Abhishek C
相关产品推荐
相关产品推荐

