一种将ClickhouseSQL转换成ElastchsearchDSL的方法技术

技术编号:33434172 阅读:17 留言:0更新日期:2022-05-19 00:23
本发明专利技术公开了一种将Clickhouse SQL转换成Elastchsearch DSL的方法,具体涉及计算机数据转换领域,采用SQL语法解析与等价语义转义,其中具体转换步骤如下:S1、SQL语法解析与抽象语法树AST生成:该阶段主要实现SQL的词法解析、语法解析、抽象语法树的生成,该阶段会对Clickhouse SQL的特殊token进行识别处理。本发明专利技术将ClickhouseSQL解析生成抽象语法树,采用超前扫描算法,对SQL形式的预判实现SQL的等价简化,对于token识别判断特殊的函数并翻译成ElasticSearch query DSL,在转换ElasticSearch DSL时对于Nest类型数据的自动适配,并生成nest查询语句,涉及Clickhouse SQL逻辑等价转换ElasticSearch DSL的技术,适用于企业内部对于业务层与数据层之间的抽象、解耦。解耦。解耦。

【技术实现步骤摘要】
一种将Clickhouse SQL转换成Elastchsearch DSL的方法


[0001]本专利技术涉及计算机数据转换
,更具体地说,本专利技术涉及一种将Clickhouse SQL转换成Elastchsearch DSL的方法。

技术介绍

[0002]实现Clickhouse SQL对ElasticSearch DSL的等价转换具有很重要的现实意义,软件开发中业务逻辑是离不开数据支撑的,数据的存储和查询是最平常且不可缺少的需求。一般情况下,一个软件底层使用的数据存储组件是固定的。
[0003]随着企业的快速的发展,客户越来越多,客户的需求呈现多样化。在企业产品的软件化部署时,会遇到客户能够提供数据存储组件和产品实际使用存储组件不一样的情况,比如产品是基于Clickhouse开发的但是客户环境是Elasticsearch,客户重新部署一套新的Clickhouse环境成本很高,希望能够对ElasticSearch进行适配。
[0004]客户需求是多样化的,但是产品业务逻辑是一样的,因此需要一种能够实现业务逻辑与数据源解耦的框架,来减少企业产品适配的成本。面对这种情况,由于Clickhouse和Elasticsearch查询语句的差异性,企业一般会采用代码切分支进行维护,这样会导致同时开发维护两套代码,增加了产品开发、迭代、维护的复杂度和维护成本。
[0005]有鉴于此,本技术提供了Clickhouse SQL逻辑等价转换ElasticSearch DSL的实现方法,并实现了业务层和数据层的解耦。

技术实现思路

[0006]为了克服现有技术的上述缺陷,本专利技术的实施例提供一种将Clickhouse SQL转换成Elastchsearch DSL的方法,本专利技术所要解决的技术问题是:如何解决Clickhouse SQL逻辑等价转换的问题,并实现业务层和数据层的解耦。
[0007]为实现上述目的,本专利技术提供如下技术方案:一种将Clickhouse SQL转换成Elastchsearch DSL的方法,采用SQL语法解析与等价语义转义,其中具体转换步骤如下:
[0008]S1、SQL语法解析与抽象语法树AST生成:该阶段主要实现SQL的词法解析、语法解析、抽象语法树的生成,该阶段会对Clickhouse SQL的特殊token进行识别处理;
[0009]S2、SQL执行计划生成:该阶段会遍历步骤S1中生成的抽象语法树,通过超前扫描算法:
[0010]提前读取下一个token;
[0011]进行辅助判断并生成等价的SQL执行计划(QueryAction);
[0012]该阶段会对复杂的SQL进行等价简化;
[0013]S3、SQL执行计划等价语义转义:将步骤S2找那个生成的SQL执行计划进行ElasticSearch query DSL的等价语义转换;
[0014]对于一些复杂的特殊SQL函数需要等价解析ElasticSearch的script语言,最终翻译成完整的ElasticSearch DSL,然后提交服务器执行。
[0015]在一个优选地实施方式中,所述步骤S1中对Clickhouse SQL的特殊token识别处理方法采用ARRAY JOIN和标准SQL的JOIN的差异处理。
[0016]在一个优选地实施方式中,所述步骤S2中对复杂的SQL进行等价简化方法:将Select*from(Select id from tableA where id=1)简化为select id from tableA where id=1。
[0017]在一个优选地实施方式中,所述步骤S3中特殊SQL函数包括且不限于groupUniqArrayArray()和arrayIntersect(groupUniqArrayArray(f1),['v1','v2'])函数。
[0018]本专利技术的技术效果和优点:
[0019]本专利技术将ClickhouseSQL解析生成抽象语法树,采用超前扫描算法,对SQL形式的预判实现SQL的等价简化,对于token识别判断特殊的函数并翻译成ElasticSearch query DSL,在转换ElasticSearch DSL时对于Nest类型数据的自动适配,并生成nest查询语句,涉及Clickhouse SQL逻辑等价转换ElasticSearch DSL的技术,适用于企业内部对于业务层与数据层之间的抽象、解耦。
附图说明
[0020]图1为本专利技术的词法解析器架构流程图。
[0021]图2为本专利技术的语法树结构图。
具体实施方式
[0022]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0023]实施例1:
[0024]本专利技术提供了一种将Clickhouse SQL转换成Elastchsearch DSL的方法,采用SQL语法解析与等价语义转义,其中具体转换步骤如下:
[0025]S1、SQL语法解析与抽象语法树AST生成:该阶段主要实现SQL的词法解析、语法解析、抽象语法树的生成,该阶段采用ARRAY JOIN的差异处理对Clickhouse SQL的特殊token进行识别处理;
[0026]S2、SQL执行计划生成:该阶段会遍历步骤S1中生成的抽象语法树,通过超前扫描算法:
[0027]提前读取下一个token;
[0028]进行辅助判断并生成等价的SQL执行计划;
[0029]该阶段会对复杂的SQL进行等价简化:如将Select*from(Select id from tableA where id=1)简化为select id from tableA where id=1;
[0030]S3、SQL执行计划等价语义转义:将步骤S2找那个生成的SQL执行计划进行ElasticSearch query DSL的等价语义转换;
[0031]对于一些复杂的特殊SQL函数如groupUniqArrayArray()函数需要等价解析
ElasticSearch的script语言,最终翻译成完整的ElasticSearch DSL,然后提交服务器执行。
[0032]实施例2:
[0033]本专利技术提供了一种将Clickhouse SQL转换成Elastchsearch DSL的方法,采用SQL语法解析与等价语义转义,其中具体转换步骤如下:
[0034]S1、SQL语法解析与抽象语法树AST生成:该阶段主要实现SQL的词法解析、语法解析、抽象语法树的生成,该阶段采用标准SQL的JOIN的差异处理对Clickhouse SQL的特殊token进行识别处理;...

【技术保护点】

【技术特征摘要】
1.一种将Clickhouse SQL转换成Elastchsearch DSL的方法,其特征在于:采用SQL语法解析与等价语义转义,其中具体转换步骤如下:S1、SQL语法解析与抽象语法树AST生成:该阶段主要实现SQL的词法解析、语法解析、抽象语法树的生成,该阶段会对Clickhouse SQL的特殊token进行识别处理;S2、SQL执行计划生成:该阶段会遍历步骤S1中生成的抽象语法树,通过超前扫描算法:提前读取下一个token;进行辅助判断并生成等价的SQL执行计划;该阶段会对复杂的SQL进行等价简化;S3、SQL执行计划等价语义转义:将步骤S2找那个生成的SQL执行计划进行ElasticSearch query DSL的等价语义转换;对于一些复杂的特殊SQL函数需要等价解析ElasticSearch的script语言,最终翻译成完整的ElasticSearch DSL,然后提交服务器执行。2.根据权利要求1所述的一种将Clickhou...

【专利技术属性】
技术研发人员:牛世淮
申请(专利权)人:全知科技杭州有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1