一种Clickhouse数据库虚拟列查询方法和装置制造方法及图纸

技术编号:35165096 阅读:21 留言:0更新日期:2022-10-12 17:27
一种Clickhouse数据库虚拟列查询方法和装置,方法包括:获取Clickhouse数据库配置文件中包含的虚拟列信息;当收到用户输入的SQL查询语句后,如果根据虚拟列信息确定所述SQL查询语句中的查询对象包含虚拟列,则根据预先设置的转换规则和所述虚拟列信息将所述SQL查询语句转换为Clickhouse JSON函数调用序列。JSON函数调用序列。JSON函数调用序列。

【技术实现步骤摘要】
一种Clickhouse数据库虚拟列查询方法和装置


[0001]本申请涉及数据库领域,尤指一种Clickhouse数据库虚拟列查询方法和装置。

技术介绍

[0002]在软件项目的开发实施和定制过程中,为数据库表增加列定义,以存储新的数据是一种频繁出现的需求,但是数据库表结构定义频繁修改会带来其它方面的困难和额外工作量。Clickhouse数据库通过JSON函数从存储JSON数据的列查询JSON Key相关数据,部分解决了上述需求。但是为了实现虚拟列查询,Clickhouse SQL必须使用正确的JSON函数、从正确的JSON列抽取数据,SQL语句会相当复杂且不便于阅读和修改。

技术实现思路

[0003]本申请提供了一种Clickhouse数据库虚拟列查询方法和装置,可以基于标准的SQL查询语句访问Clickhouse数据库中的虚拟列数据。
[0004]本申请提供了一种Clickhouse数据库虚拟列查询方法,方法包括:
[0005]获取Clickhouse数据库配置文件中包含的虚拟列信息;
[0006]当收到用户输入的SQL查询语句后,如果根据虚拟列信息确定所述SQL查询语句中的查询对象包含虚拟列,则根据预先设置的转换规则和所述虚拟列信息将所述SQL查询语句转换为Clickhouse JSON函数调用序列。
[0007]一种示例性的实施例中,所述获取Clickhouse数据库配置文件中包含的虚拟列信息,包括:
[0008]获取Clickhouse数据库配置文件的数据表结构和真实列信息;
[0009]根据所获取的数据表结构、将虚拟列信息添加存储到所对应的真实列名相对应的数据表列中;
[0010]确定Clickhouse数据库中虚拟列信息,其中,所述虚拟列信息包括:所在数据库中数据表的名称、虚拟列的名称、数据类型和JSON列名。
[0011]一种示例性的实施例中,所述真实列信息包括:列标识、类型、长度。
[0012]一种示例性的实施例中,所述根据预先设置的转换规则和所述虚拟列信息将所述SQL语句转换为Clickhouse JSON函数调用序列,包括:
[0013]将所述SQL查询语句解析为抽象语法树;
[0014]遍历抽象语法树,根据所述语法树中的上下文信息确定是否存在虚拟列;
[0015]若存在虚拟列时,则根据预先设置的虚拟列和JSON函数之间的对应关系,得到作为查询对象的虚拟列对应的JSON函数;
[0016]使用该虚拟列对应的JSON函数替代SQL查询语句中的虚拟列,得到JSON函数调用序列。
[0017]一种示例性的实施例中,方法还包括:
[0018]将所述Clickhouse JSON函数调用序列输出为该输入的查询虚拟列的SQL语句转
换后的SQL语句;
[0019]并利用转换后的SQL语句查询Clickhouse数据库配置文件的真实列数据和虚拟列数据。
[0020]本申请还提供了一种Clickhouse数据库虚拟列查询的装置,包括:存储器和处理器;所述存储器,用于保存用于Clickhouse数据库虚拟列查询的程序;
[0021]所述处理器,用于读取执行所述用于Clickhouse数据库虚拟列查询的程序,执行如下操作:
[0022]获取Clickhouse数据库配置文件中包含的虚拟列信息;
[0023]当收到用户输入的SQL查询语句后,如果根据虚拟列信息确定所述SQL查询语句中的查询对象包含虚拟列,则根据预先设置的转换规则和所述虚拟列信息将所述SQL查询语句转换为Clickhouse JSON函数调用序列。
[0024]一种示例性的实施例中,所述获取Clickhouse数据库配置文件中包含的虚拟列信息,包括:
[0025]获取Clickhouse数据库配置文件的数据表结构和真实列信息;
[0026]根据所获取的数据表结构、将虚拟列信息添加存储到所对应的真实列名相对应的数据表列中;
[0027]确定Clickhouse数据库中虚拟列信息,其中,所述虚拟列信息包括:所在数据库中数据表的名称、虚拟列的名称、数据类型和JSON列名。
[0028]一种示例性的实施例中,所述真实列信息包括:列标识、类型、长度。
[0029]一种示例性的实施例中,所述根据预先设置的转换规则和所述虚拟列信息将所述SQL语句转换为Clickhouse JSON函数调用序列,包括:
[0030]将所述SQL查询语句解析为抽象语法树;
[0031]遍历抽象语法树,根据所述语法树中的上下文信息确定是否存在虚拟列;
[0032]若存在虚拟列时,则根据预先设置的虚拟列和JSON函数之间的对应关系,得到作为查询对象的虚拟列对应的JSON函数;
[0033]使用该虚拟列对应的JSON函数替代SQL查询语句中的虚拟列,得到JSON函数调用序列。
[0034]一种示例性的实施例中,所述存储器还用于:
[0035]将所述Clickhouse JSON函数调用序列输出为该输入的查询虚拟列的SQL语句转换后的SQL语句;
[0036]并利用转换后的SQL语句查询Clickhouse数据库配置文件的真实列数据和虚拟列数据。
[0037]与相关技术相比,本申请提供一种Clickhouse数据库虚拟列查询方法和装置,方法包括:获取Clickhouse数据库配置文件中包含的虚拟列信息;当收到用户输入的SQL查询语句后,如果根据虚拟列信息确定所述SQL查询语句中的查询对象包含虚拟列,则根据预先设置的转换规则和所述虚拟列信息将所述SQL查询语句转换为Clickhouse JSON函数调用序列。本申请可以基于对通用的SQL查询语句的转换,以实现对Clickhouse数据库虚拟列的查询。
[0038]本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变
得显而易见,或者通过实施本申请而了解。本申请的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
[0039]附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
[0040]图1为本申请实施例的Clickhouse数据库虚拟列查询的方法流程图;
[0041]图2为一示例实施例的Clickhouse数据库虚拟列查询的方法流程图;
[0042]图3为本申请实施例的Clickhouse数据库虚拟列查询装置示意图。
具体实施方式
[0043]本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种Clickhouse数据库虚拟列查询方法,其特征在于,方法包括:获取Clickhouse数据库配置文件中包含的虚拟列信息;当收到用户输入的SQL查询语句后,如果根据虚拟列信息确定所述SQL查询语句中的查询对象包含虚拟列,则根据预先设置的转换规则和所述虚拟列信息将所述SQL查询语句转换为Clickhouse JSON函数调用序列。2.根据权利要求1所述的Clickhouse数据库虚拟列查询方法,其特征在于,所述获取Clickhouse数据库配置文件中包含的虚拟列信息,包括:获取Clickhouse数据库配置文件的数据表结构和真实列信息;根据所获取的数据表结构、将虚拟列信息添加存储到所对应的真实列名相对应的数据表列中;确定Clickhouse数据库中虚拟列信息,其中,所述虚拟列信息包括:所在数据库中数据表的名称、虚拟列的名称、数据类型和JSON列名。3.根据权利要求2所述的Clickhouse数据库虚拟列查询方法,其特征在于,所述真实列信息包括:列标识、类型、长度。4.根据权利要求3所述的Clickhouse数据库虚拟列查询方法,其特征在于,所述根据预先设置的转换规则和所述虚拟列信息将所述SQL语句转换为Clickhouse JSON函数调用序列,包括:将所述SQL查询语句解析为抽象语法树;遍历抽象语法树,根据所述语法树中的上下文信息确定是否存在虚拟列;若存在虚拟列时,则根据预先设置的虚拟列和JSON函数之间的对应关系,得到作为查询对象的虚拟列对应的JSON函数;使用该虚拟列对应的JSON函数替代SQL查询语句中的虚拟列,得到JSON函数调用序列。5.根据权利要求1所述的Clickhouse数据库虚拟列查询方法,其特征在于,方法还包括:将所述Clickhouse JSON函数调用序列输出为该输入的查询虚拟列的SQL语句转换后的SQL语句;并利用转换后的SQL语句查询Clickhouse数据库中的真实列数据和虚拟列数据。6.一种Clickhouse数据库虚拟列查询的装置,包括:存储器和处理器;其特征在于:所述存储器,用于保存用...

【专利技术属性】
技术研发人员:朱国峰
申请(专利权)人:北京兰云科技有限公司
类型:发明
国别省市:

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

1