Crabc是低代码开发平台,企业级API发布管理系统,通过在线编写通用SQL并发布成一个Rest接口对外提供服务。只要是支持SQL标准语法的数据库理论上Crabc都是支持直接使用的,目前已经实现了对SQL数据库和NoSQL ElasticSearch的SQL方式接入,正在考虑接入MongoDB数据库。MongoDB是文档数据库,没有像ES那样有SQL语法查询的扩展实现,目前只能考虑引入第三方组件或者是进行SQL转换。
支持MongoDB使用类SQL语法查询的开源组件有PrestoDB、Trino和Calcite。简单的了解了一下它们的功能,它们都是计算类框架且内部都定义了一套自己的规则 比较重量级,暂时没有考虑引入这几个框架。本来想自己写一个SQL转换工具类的,幸运的是在Github闲逛时搜到了一个SQL转MongoDB的开源工具,sql-to-mongo-db-query-converter (开源地址:https://github.com/vincentrussell/sql-to-mongo-db-query-converter)
看了一下它的介绍和SQL转换效果,感觉还是挺符合目前我要在Crabc上接入MongoDB的实现的功能的。基本上通用的查询语法,像时间函数,like、in、distinct、group/order和join都支持,也支持修改和删除语法。目前感觉还是可以用上的,先进一步看看源码在准备引入到Crabc中实现对MongoDB的通用SQL查询。后续实在不支持的语法也可以自己进行扩展实现(这工具包是Java开发的)。
SQL转换结果
Date
select * from my_table where date(column,'YYYY-MM-DD') >= '2023-03-26'
******Result:*********
db.my_table.find({
"column": {
"$gte": {
"$date": 12111122221
}
}
})
Distinct
select distinct column1 from my_table where value IS NULL
******Result:*********
db.my_table.distinct("column1" , {
"value": {
"$exists": false
}
})
Like
select * from my_table where value LIKE 'test%'
******Result:*********
db.my_table.find({
"value": {
"$regex": "^test.*#34;
}
})
In
select column1 from my_table where value IN ("test"")
******Result:*********
db.my_table.find({
"value" : {
"$in" : ["test"]
}
})
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8227.html