SQL to ElasticSearch DSL

11 篇文章 0 订阅
3 篇文章 0 订阅
        众所周知ElasticSearch目前是一个应用最为广泛的分布式搜索与分析引擎,它的功能强大,能够已很高的性能访问大规模数据。它拥有强大的查询分析语法,能够完成模糊查询、精准查询及聚集计算等诸多功能的表达。但对于那些用惯了SQL语言的数据分析人员来说,掌握ElasticSearch的DSL语言来做以前熟悉的事情,还是有比较陡的学习曲线的。

MOQL是一款基于Java的面向内存对象过滤、查询及统计分析的开源工具,即可以用SQL语言对JAVA内存中的任意集合对象进行统计计算,详见《MOQL简介》。除此外,MOQL还有一个子模块moql-translator,该模块用于完成从MOQL语法(SQL语法的一个子集,涵盖了绝大多数常用语法)到各类不同数据库SQL语法的转换,如它提供到Oracle、SqlServer以及DB2等不同SQL方言的转换,也提供了到ElasticSearch DSL的语法转换。有了这种转换,可以大大降低数据分析人员学习不同分析语言的学习曲线,能够快速的享受新的分析引擎技术带来的便利。

        MOQL本质上是一个开发程序包,应用它进行SQL到ElasticSearch DSL的转换非常方便,如下代码示例:

       该代码执行完转换后,输出的ElasticSearch DSL语法为:


        将该结果提交给ElasticSearch引擎可以达到与程序中sql语句匹配的执行效果。就是这样简单,可以立刻去https://github.com/colorknight/moql下载个源码试试了。
当然由于ElasticSearch DSL语法的能力过于强大,MOQL目前还无法提供完整的转换能力,并且为适应两种不同语法间的差异还做了些技巧性的设计,需要使用者在使用时加以注意。

ElsaticSearch DSL的query子句中有query上下文与filter上下文两种上下文(本文不解释两种上下文的差异,请参见相关资料),这两种上下文分别对应了SQL语法的两个子句。query上下文对应了where子句,filter上下文对应了having子句。这样的对应关系主要是技巧性的对应,并不体现各部分在ElasticSerach上的执行顺序。所以在应用ElasticSearch DSL的此类特性时需要留意,不要写错SQL子句。

        另外,对于MOQL现在不能支持的ElasticSearch DSL的特殊语法,MOQL建议通过编写函数(UDF,User Define Function)的方式予以扩展。扩展时通过继承org.moql.sql.es. ESFunctionTranslator接口来实现扩展函数,然后再去org.moql.sql.es. ElasticSearchTranslator中注册函数即可。

        下面将给出SQL与ElasticSearch DSL的语法转换对照表,方便使用者全面了解SQL转换成ElasticSearch DSL后能达到的语法能力。





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值