CN116701443A - 一种数据查询方法、装置、计算机设备及存储介质 - Google Patents
一种数据查询方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116701443A CN116701443A CN202210173485.9A CN202210173485A CN116701443A CN 116701443 A CN116701443 A CN 116701443A CN 202210173485 A CN202210173485 A CN 202210173485A CN 116701443 A CN116701443 A CN 116701443A
- Authority
- CN
- China
- Prior art keywords
- data
- query
- sub
- target
- condition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 99
- 230000005540 biological transmission Effects 0.000 claims abstract description 62
- 238000013500 data storage Methods 0.000 claims description 53
- 239000012634 fragment Substances 0.000 claims description 34
- 238000012795 verification Methods 0.000 claims description 34
- 238000012545 processing Methods 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 8
- 238000012512 characterization method Methods 0.000 claims description 3
- 238000013507 mapping Methods 0.000 claims description 3
- 101100328886 Caenorhabditis elegans col-2 gene Proteins 0.000 description 89
- 101100328884 Caenorhabditis elegans sqt-3 gene Proteins 0.000 description 33
- 230000008569 process Effects 0.000 description 25
- 238000010586 diagram Methods 0.000 description 18
- 238000005516 engineering process Methods 0.000 description 16
- 101100237842 Xenopus laevis mmp18 gene Proteins 0.000 description 13
- 230000006870 function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 8
- 238000005192 partition Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000010897 surface acoustic wave method Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24535—Query rewriting; Transformation of sub-queries or views
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据查询方法、装置、计算机设备及存储介质,可以应用于云计算或智能交通领域等,用于解决数据查询效率较低的问题。该方法包括:获取目标查询语句,并确定所述目标查询语句指示查询的至少一个目标数据源,以及至少一个目标数据单元;分别对所述查询条件进行子条件划分,获得多个子条件,以及分别生成所述多个子条件各自对应的子查询语句;通过多个子查询语句各自对应的数据传输通道,分别获取所述多个子查询语句各自指示查询的子数据;对获得的多个子数据进行合并处理,生成所述目标查询语句指示查询的目标数据,通过同时执行多个子查询语句,并合并获取的多个子数据,得到目标查询语句指示查询的目标数据,提高了数据查询的效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据查询方法、装置、计算机设备及存储介质。
背景技术
随着科技的不断发展,设备从同一数据源中查询数据的数据量与日俱增,分别在不同数据源中查询数据的查询规则也日益丰富。
相关技术下,当设备在一数据源中进行数据查询时,由于数据传输通道可传输的数据量有限,因此,在被查询数据的数据量较大时,数据源通过数据传输通道,向设备传输被查询数据的过程中,容易造成数据传输通道拥堵,令设备获取完整的被查询数据的时间较长,使得数据查询效率较低。
另一方面,由于不同数据源中查询数据的查询规则不同,因此,当设备在多个数据源中进行查询数据时,设备需要基于多个数据源各自的查询规则,循环进行多次查询过程,令设备获得完整的被查询数据的过程较为复杂,使得数据查询效率较低。
可见,相关技术下,无论是在同一数据源中查询数据的过程,还是在多个数据源中查询数据的过程,数据查询效率均较低。
发明内容
本申请实施例提供了一种数据查询方法、装置、计算机设备及存储介质,用于解决数据查询效率较低的问题。
第一方面,提供一种数据查询方法,包括:
获取目标查询语句,并对所述目标查询语句进行解析,确定所述目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合所述目标查询语句包含的查询条件的至少一个目标数据单元;
基于获得的至少一个目标数据单元的数据存储特征,分别对所述查询条件进行子条件划分,获得多个子条件,以及分别生成所述多个子条件各自对应的子查询语句;
通过多个子查询语句各自对应的数据传输通道,从所述至少一个目标数据单元中,分别获取所述多个子查询语句各自指示查询的子数据;
对获得的多个子数据进行合并处理,生成所述目标查询语句指示查询的目标数据。
第二方面,提供一种数据查询装置,包括:
获取模块:用于获取目标查询语句,并对所述目标查询语句进行解析,确定所述目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合所述目标查询语句包含的查询条件的至少一个目标数据单元;
处理模块:用于基于获得的至少一个目标数据单元的数据存储特征,分别对所述查询条件进行子条件划分,获得多个子条件,以及分别生成所述多个子条件各自对应的子查询语句;
所述处理模块还用于:通过多个子查询语句各自对应的数据传输通道,从所述至少一个目标数据单元中,分别获取所述多个子查询语句各自指示查询的子数据;
所述处理模块还用于:对获得的多个子数据进行合并处理,生成所述目标查询语句指示查询的目标数据。
可选的,所述目标数据单元中存储的各个数据各自具有的索引信息,每个索引信息用于唯一表征所述目标数据单元中的一个数据或一组数据;
所述处理模块具体用于:
针对所述至少一个目标数据单元,分别执行以下操作:
基于一个目标数据单元的数据存储特征,确定所述一个目标数据单元符合所述查询条件的多个数据各自的索引信息;
基于各个索引信息,对所述多个数据进行分组,生成多个数据分片,其中,每个数据分片包含至少一个数据;
基于所述多个数据分片,对所述查询条件进行子条件划分,获得所述多个数据分片各自对应的子条件。
可选的,所述索引信息的信息类型为数值类型或时间类型时,所述处理模块具体用于:
基于所述各个索引信息的取值分布,确定包含所述各个索引信息的取值区间;
将所述取值区间,划分为指定数量的多个子区间;
分别将所述多个数据中,对应的索引信息属于同一子区间的数据分为一组,获得所述多个数据分片。
可选的,所述处理模块具体用于:
针对所述多个数据分片,分别执行以下操作:
基于一个数据分片涉及的至少一个数据,将所述查询条件划分为多个备选子条件,其中,每个备选子条件用于指示查询所述一个数据分片中的一个数据,或者,用于指示查询除了所述至少一个数据以外的数据;
基于指示查询所述一个数据分片中的一个数据的各个备选子条件的并集,获得所述数据分片对应的子条件。
可选的,所述处理模块具体用于:
针对所述多个子条件,分别执行以下操作:
将所述目标查询语句中的查询条件,替换为一个子条件,生成子查询语句;
基于预设的数据查询验证策略,对所述子查询语句进行语句验证,获得所述子查询语句的验证结果,其中,所述验证结果用于表征基于所述子查询语句,是否可以从相应的目标数据单元获取到所述一个子条件指示查询的子数据;
确定所述验证结果表征基于所述子查询语句,可以从相应的目标数据单元获取到所述一个子条件指示查询的子数据时,获得所述子条件对应的子查询语句。
可选的,所述处理模块具体用于:
针对所述多个子查询语句,分别执行以下操作:
基于一个子查询语句指示查询的目标数据单元,将所述一个子查询语句,映射为一个数据视图,其中,所述一个数据视图用于表征所述一个子查询语句指示查询的子数据的数据存储地址;
基于所述一个子查询语句,建立一个数据传输通道;
基于所述一个数据视图表征的数据存储地址,通过所述数据传输通道,获取所述一个子查询语句指示查询的子数据。
第三方面,提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如第一方面所述的方法。
第四方面,提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如第一方面所述的方法。
第五方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如第一方面所述的方法。
本申请实施例中,通过一条目标查询语句,向至少一个目标数据源的每个目标数据源中的至少一个目标数据单元,查询目标数据。基于每个目标数据单元的数据存储特征,对目标查询语句包含的查询条件进行子条件划分,获得多个子条件,并分别生成多个子条件各自对应的子查询语句。将目标查询语句转化为多个子查询语句,从而可以基于多个子查询语句各自对应的数据传输通道,并发获取多个子查询语句各自指示查询的子数据,通过合并获得的多个子数据,可以获得目标查询语句指示查询的目标数据,避免了目标数据的数据量较大时,由于数据传输通道可传输的数据量有限,造成数据传输通道在传输目标数据时出现拥堵,令设备获取完整的目标数据的时间较长,导致目标数据的数据查询效率较低的问题。进一步的,在向多个数据源或多个目标数据单元查询目标数据时,不需要循环多次查询过程,不同的子查询语句可以并发从不同的数据源或不同的目标数据单元获取相应的子数据,简化了获得完整的目标数据的过程,提高了目标数据的数据查询效率。
附图说明
图1a为相关技术下的数据查询方法的一种原理示意图一;
图1b为相关技术下的数据查询方法的一种原理示意图二;
图1c为相关技术下的数据查询方法的一种原理示意图二;
图1d为本申请实施例提供的数据查询方法的一种应用场景;
图2为本申请实施例提供的数据查询方法的一种流程示意图;
图3a为本申请实施例提供的数据查询方法的一种原理示意图一;
图3b为本申请实施例提供的数据查询方法的一种原理示意图二;
图4a为本申请实施例提供的数据查询方法的一种原理示意图三;
图4b为本申请实施例提供的数据查询方法的一种原理示意图四;
图4c为本申请实施例提供的数据查询方法的一种原理示意图五;
图5a为本申请实施例提供的数据查询方法的一种原理示意图六;
图5b为本申请实施例提供的数据查询方法的一种原理示意图七;
图6a为本申请实施例提供的数据查询方法的一种原理示意图八;
图6b为本申请实施例提供的数据查询方法的一种原理示意图九;
图6c为本申请实施例提供的数据查询方法的一种原理示意图十;
图6d为本申请实施例提供的数据查询方法的一种原理示意图十一;
图6e为本申请实施例提供的数据查询方法的一种原理示意图十二;
图7为本申请实施例提供的数据查询装置的一种结构示意图一;
图8为本申请实施例提供的数据查询装置的一种结构示意图二。
具体实施方式
为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
下面对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)数据源:
数据源是一种数据存储系统,包括传统的关系型数据库,如Oracle、MySQL等,还包括大数据存储系统,如Hive、HBase等。
(2)Java数据库连接:
Java数据库连接(Java Database Connectivity,JDBC),是Java语言中用来规范客户端应用程序如何访问数据库的应用程序接口,提供了查询、更新数据库中数据的方法。
(3)结构化查询语言:
结构化查询语言(Structured Query Language,SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库。SQL是高级的非过程化编程语言,允许在高层数据结构上工作。SQL不需要指定对数据的存放方法,也不需要了解具体的数据存放方式,是完全不同底层结构的数据库系统,可以嵌套使用。
(4)数据仓库:
数据仓库(hive)是基于大数据软件系统运行框架Hadoop构建的,用来实现数据提取、转化和加载等过程,数据仓库是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive能将结构化的数据文件映射为一张数据库表,并提供结构化查询语言SQL的查询功能。
(5)基于代价的查询优化器:
基于代价的查询优化器(Cost-Based Optimization,CBO)通过给结构化查询语句的所有执行计划制定一个统一的度量,计算每个执行计划的代价。例如,根据执行计划中数据对象的统计信息和代价算法,计算每个执行计划的代价。统计信息表征了数据对象本身影响执行计划效率的属性,比如行数,唯一键值数等。代价算法将统计信息处理成具有统一标准的数值,作为选择执行计划的依据。
(6)数据视图(view):
基于结构化查询语言的查询语句获得的结果集的可视化的虚拟的数据结构,数据表格式的数据视图包含行和列,类似真实的数据表。
本申请实施例涉及云计算(cloud computing)技术,是基于云存储(cloudstorage)技术设计的,可以应用于人工智能领域、智慧交通领域或地图领域等。
云计算是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为基础设施即服务(Infrastructure as a Service,IaaS)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
按照逻辑功能划分,在IaaS层上可以部署平台即服务(Platform as a Service,PaaS)层,PaaS层之上再部署软件即服务(Software as a Service,SaaS)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,SaaS和PaaS相对于IaaS是上层。
云存储是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID entity,ID)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(Redundant Array ofIndependent Disk,RAID)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
应当说明的是,本申请实施例中,如果涉及到与用户数据相关的内容,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面对本申请实施例提供的数据查询方法的应用领域进行简单介绍。
随着科技的不断发展,设备从同一数据源中查询数据的数据量与日俱增,分别在不同数据源中查询数据的查询规则也日益丰富。在从数据源查询数据时,设备可以在接收查询语句之后,基于查询语句,从相应的数据源中查询相应的被查询数据。
相关技术下,当设备在一数据源中进行数据查询时,由于数据传输通道可传输的数据量有限,因此,在被查询数据的数据量较大时,数据源通过数据传输通道,向设备传输被查询数据的过程中,容易造成数据传输通道拥堵,令设备获取完整的被查询数据的时间较长,使得数据查询效率较低。
相关技术下,请参考图1a,基于大数据软件系统运行框架Hadoop关联的新型数据仓库hive,与传统关系型数据库之间查询数据的场景,关系型数据库可以向数据参考发送查询语句,数据仓库可以在接收查询语句之后,获取查询语句指示查询的被查询数据,数据仓库可以向关系型数据库发送被查询数据,从而,关系型数据库可以通过查询语句,获得被查询数据。
在被查询数据的数据量较大时,假设被查询数据以数据表的形式存储,被查询数据中每条数据记录了主键、设备名称、设备类型和设备的上线时长,那么,请参考图1b,可以基于主键列,将被查询数据分为多组,例如,被查询数据包含主键列分别为1、2、3、4和5的五条数据,将主键列为1的数据划分为第一子数据组,将主键列为2和3的数据划分为第二子数据组,将主键列为4和5的数据划分为第三子数据组。
从而,关系型数据库可以依次从数据仓库中,查询每组数据,例如,请参考图1c,关系型数据库先通过数据传输通道,查询第一子数据组,在获得第一子数据组之后,关系型数据库再次通过数据传输通道,查询第二子数据组,在获得第二子数据组之后,关系型数据库再次通过数据传输通道,查询第三子数据组。通过循环多次使用数据传输通道,传输每组数据,达到避免造成数据传输通道拥堵的目的。
相关技术中,解决数据传输通道拥堵问题的方法,实际上,与从多个数据源查询数据的方法类似,由于不同数据源中查询数据的查询规则不同,因此,当设备从多个数据源中进行查询数据时,设备需要基于多个数据源各自的查询规则,循环进行多次查询过程。在循环多次使用数据传输通道,传输每组数据的过程中,以及在循环进行多次查询过程中,设备获得完整的被查询数据的过程较为复杂,使得数据查询效率较低。
可见,相关技术下,无论是在同一数据源中查询数据的过程,还是在多个数据源中查询数据的过程,数据查询效率均较低。
为了解决数据查询效率较低的问题,本申请提出一种数据查询方法。该方法中,在获取目标查询语句之后,对目标查询语句进行解析,确定目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合目标查询语句包含的查询条件的至少一个目标数据单元。基于获得的至少一个目标数据单元的数据存储特征,分别对查询条件进行子条件划分,获得多个子条件,以及分别生成多个子条件各自对应的子查询语句。通过多个子查询语句各自对应的数据传输通道,从至少一个目标数据单元中,分别获取多个子查询语句各自指示查询的子数据。对获得的多个子数据进行合并处理,生成目标查询语句指示查询的目标数据。
本申请实施例中,通过一条目标查询语句,向至少一个目标数据源的每个目标数据源中的至少一个目标数据单元,查询目标数据。基于每个目标数据单元的数据存储特征,对目标查询语句包含的查询条件进行子条件划分,获得多个子条件,并分别生成多个子条件各自对应的子查询语句。将目标查询语句转化为多个子查询语句,从而可以基于多个子查询语句各自对应的数据传输通道,并发获取多个子查询语句各自指示查询的子数据,通过合并获得的多个子数据,可以获得目标查询语句指示查询的目标数据,避免了目标数据的数据量较大时,由于数据传输通道可传输的数据量有限,造成数据传输通道在传输目标数据时出现拥堵,令设备获取完整的目标数据的时间较长,导致目标数据的数据查询效率较低的问题。进一步的,在向多个数据源或多个目标数据单元查询目标数据时,不需要循环多次查询过程,不同的子查询语句可以并发从不同的数据源或不同的目标数据单元获取相应的子数据,简化了获得完整的目标数据的过程,提高了目标数据的数据查询效率。
下面对本申请提供的数据查询方法的应用场景进行说明。
请参考图1d,为本申请提供的数据查询方法的一种应用场景示意图。该应用场景中包括客户端101和服务端102。客户端101和服务端102之间可以通信。通信方式可以是采用有线通信技术进行通信,例如,通过连接网线或串口线进行通信;也可以是采用无线通信技术进行通信,例如,通过蓝牙或无线保真(wireless fidelity,WIFI)等技术进行通信,具体不做限制。
客户端101泛指可以向服务端102提供目标查询语句的设备,例如,终端设备、终端设备可以访问的第三方应用程序或终端设备可以访问的网页等。终端设备包括但不限于手机、电脑、智能交通设备、智能电器等。服务端102泛指可以基于目标查询语句,查询目标数据的设备,例如,终端设备或服务器等。服务器包括但不限于云服务器、本地服务器或关联的第三方服务器等。客户端101和服务端102均可以采用云计算,以减少本地计算资源的占用;同样也可以采用云存储,以减少本地存储资源的占用。
作为一种实施例,客户端101和服务端102可以是同一个设备,具体不做限制。本申请实施例中,以客户端101和服务端102分别为不同的设备为例进行介绍。
下面基于图1d,以服务端102为服务器,以服务器为主体,对本申请实施例提供的数据查询方法进行具体介绍。请参考图2,为本申请实施例提供的数据查询方法的一种流程示意图。
S201,获取目标查询语句,并对目标查询语句进行解析,确定目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合目标查询语句包含的查询条件的至少一个目标数据单元。
服务器获取目标查询语句,可以在客户端响应于目标对象触发的输入操作,生成目标查询语句,并向服务器发送目标查询语句之后,服务器接收来自客户端发送的目标查询语句;也可以是服务器基于查询需求,以及预存的语法规则,生成的目标查询语句等,具体不做限制。
目标查询语句可以用于指示从一个目标数据源查询目标数据,也可以用于指示从多个目标数据源查询目标数据。例如,请参考图3a,目标查询语句为SQL语句,select col1,col2 from userA.mysql.db1.table1 where col2>0,可以指示从一个目标数据源mysql查询目标数据。又例如,请参考图3b,目标查询语句select*from(select col1,col2 fromuserA.mysql.db1.table1 where col2>0)ajoin(select col3,col4 fromuserA.oracle.db2.table2 where col4<0)b on a.col1=b.col3,可以指示从两个目标数据源mysql和oracle查询目标数据。
服务器在获得目标查询语句之后,可以对目标查询语句进行解析,确定目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合目标查询语句包含的查询条件的至少一个目标数据单元。每个目标数据源中可以包含一个符合目标查询语句包含的查询条件的目标数据单元,每个目标数据源中也可以包含多个符合目标查询语句包含的查询条件的目标数据单元,具体不做限制。目标查询语句包含的查询条件可以用于在相应的目标数据源存储的数据中,筛选目标数据。
例如,目标查询语句select col1,col2 from userA.mysql.db1.table1 wherecol2>0,其包含的查询条件,可以用于在mysql数据源的userA.mysql.db1.table1数据表中,查询col1列和col2列,且col2列取值大于0的目标数据。
服务器对目标查询语句进行解析,可以是基于目标查询语句的语法结构,对目标查询语句进行解析,对目标查询语句进行解析的方法有多种,例如,服务器获得目标查询语句“select col1,col2 from userA.mysql.db1.table1 where col2>0”之后,可以解析目标查询语句的语法结构,为“select XXX from XXX where XXX”,服务器可以匹配userA.mysql.db1.table1,与预存的各个备选数据源,从而确定目标查询语句指示查询的目标数据源为mysql,在确定目标数据源之后,服务器可以基于目标查询语句包含的查询条件,col1列和col2列,且col2列的取值大于0,确定符合查询条件的目标数据单元为目标对象userA,在目标数据源mysql,创建的名为db1的数据库包含table1。
又例如,服务器可以对目标查询语句的语法进行解析,获得抽象语法树。在获得抽象语法树之后,服务器可以从抽象语法树中提取出符合目标查询语句包含的查询条件的目标数据单元。例如,服务器获得目标查询语句“select col1,col2 fromuserA.mysql.db1.table1 where col2>0”之后,可以确定出相应的抽象语法树,userA为根节点,mysql为根节点的一个第一子节点,db1为第一子节点的一个第二子节点,table1为第二子节点的一个第三子节点,col1和col2分别为第三子节点的两个第四子节点。从而,服务器可以从抽象语法树中,提取出目标查询语句指示查询的目标数据源为第一子节点mysql,目标查询语句包含的查询条件为第四子节点col1列和col2列,且col2列的取值大于0,服务器可以基于查询条件,提取出目标数据单元为选取根节点对应的目标对象userA,在目标数据源mysql,创建的名为db1的第二子节点对应的数据库包含第三子节点table1。
S202,基于获得的至少一个目标数据单元的数据存储特征,分别对查询条件进行子条件划分,获得多个子条件,以及分别生成多个子条件各自对应的子查询语句。
在获得目标查询语句,并得到至少一个目标数据源,以及每个目标数据源中的至少一个目标数据单元之后,服务器可以基于获得的至少一个目标数据单元的数据存储特征,分别对查询条件进行子条件划分,获得多个子条件,以及分别生成多个子条件各自对应的子查询语句。从而,服务器将目标查询语句,划分为多个子查询语句,多个子查询语句各自包含的子条件取并集,即为原来的查询条件。
数据存储特征用于表征目标数据单元中存储的数据的统计特性,例如,目标数据单元为表格形式时,数据存储特征可以包括目标数据单元的总行数、目标数据单元的总列数、目标数据单元中每列的数据类型、目标数据单元中每列包含的最大值、目标数据单元中每列包含的最小值、目标数据单元中每列包含的空值的总数量,目标数据单元中每列包含的非空值的总数量等。
服务器可以基于目标数据单元对应的数据存储特征,对查询条件进行子条件划分,以表格形式为例,服务器可以基于一列中的最大值和最小值,对查询条件进行子条件划分;或基于一列种包含的空值和非空值,对查询条件进行子条件划分等,具体不做限制。
以一个目标数据源mysql中的目标数据单元为例,例如,请参考图4a,目标查询语句为“select col1,col2 from userA.mysql.db1.table1 where col2>0”,目标数据单元的数据存储特征表征目标数据单元的总行数为5,总列数为4,每列的数据类型均为数值类型,每列包含的最大值依次为5、66、21和7,每列包含的最小值依次为1、-15、3和2,每列包含的空值的总数量均为0,每列包含的非空值的总数量均为5。
基于目标数据单元的数据存储特征,可以对查询条件“where col2>0”进行子条件划分,获得“where 0<col2<10”、“where 10<col2<20”和“where20<col2<30”三个子条件,并生成三个子条件各自对应的子查询语句,依次为“select col1,col2 fromuserA.mysql.db1.table1 where 0<col2<10”、“select col1,col2 fromuserA.mysql.db1.table1 where 10<col2<20”和“select col1,col2 fromuserA.mysql.db1.table1 where 20<col2<30”。
作为一种实施例,服务器在基于数据存储特征,对查询条件进行子条件划分之前,可以预先采用基于代价的查询优化技术CBO,采集每个数据源包含的每个数据单元的数据存储特征,例如,服务器在采用基于代价的查询优化方法,做执行计划时,需要根据每个数据单元的数据存储特征来做执行计划,服务器可以存储每个数据单元的数据存储特征,在通过目标查询语句进行数据查询时,可以读取存储的相应数据存储特征。
服务器基于至少一个目标数据单元的数据存储特征,分别对查询条件进行子条件划分,获得多个子条件。在至少一个目标数据单元为一个目标数据单元时,服务器可以基于该一个目标数据单元的数据存储特性,将查询条件划分为多个子条件。例如,目标查询语句“select col1,col2 from userA.mysql.db1.table1where col2>0”,得到一个符合查询条件“where col2>0”的目标数据单元“userA.mysql.db1.table1”,那么基于该一个目标数据单元的数据存储特性,可以将查询条件划分为第一子条件“where 0<col2<20”,以及第二子条件“where col2>20”。
在至少一个目标数据单元为多个目标数据单元时,服务器可以分别基于多个目标数据单元中的每个目标数据单元的数据存储特性,分别将查询条件划分为多个子条件。例如,目标查询语句“select*from(select col1,col2 from userA.mysql.db1.table1where col2>0)a join(select col3,col4 from userA.oracle.db2.table2 where col4<0)b on a.col1=b.col3”,查询条件包括“where col2>0”,以及“where col4<0”。服务器得到一个符合查询条件“where col2>0”的第一目标数据单元“userA.mysql.db1.table1”,以及,一个符合查询条件“where col4<0”的第二目标数据单元“userA.oracle.db2.table2”。因此,对于第一目标数据单元,可以将查询条件“where col2>0”,划分为第一子条件“where0<col2<10”,以及第二子条件“where col2>10”。对于第二目标数据单元,可以将查询条件“where col4<0”,划分为第三子条件“where-20<col4<0”,以及第四子条件“where col4<-20”。
作为一种实施例,划分出的子条件的数量,可以基于当前可以被占用的数据传输通道的数量确定,例如,当前传输数据的任务较少时,可以被占用的数据传输通道的数量较多,就可以将查询条件划分为较多数量的子条件,那么每个子条件指示查询的子数据的数据量较小,从而可以提高基于子条件获得相应子数据的效率,达到提高数据查询的效率的目的。
划分出的子条件的数量,还可以基于数据传输通道可传输数据的上限值确定,例如,数据传输通道可传输数据的上限值为100,可以将查询条件划分为多个子条件,每个子条件指示查询数据量为100的子数据,那么每个数据传输通道可以被合理的利用,避免造成数据传输通道传输的数据的数据量较少,需要占用较多数据传输通道来传输数据的情况,提高了数据查询的灵活性。
作为一种实施例,如果目标数据单元中存储的各个数据各自具有的索引信息,每个索引信息用于唯一表征目标数据单元中的一个数据或一组数据,假设目标数据单元为表格形式时,索引信息可以是数据ID、数据名称、分区等,数据ID可以表征数据表中数据ID指示的一个数据,分区可以表征数据仓库中分区包含的一组数据。那么,服务器可以通过数据存储特征,确定出目标数据单元包含的索引信息,再基于索引信息,对查询条件进行子条件划分,获得多个子条件,避免多个子条件之间存在重复的情况,不需要对多个子条件进行重合关系过滤的过程,提高了数据查询的效率。
下面以一个目标数据单元为例介绍获得多个子条件的过程,其他目标数据单元类似,在此不再赘述。
服务器可以基于目标数据单元的数据存储特征,确定目标数据单元符合查询条件的多个数据各自的索引信息。以数据为表格形式存储为例,数据存储特征可以记录了目标数据单元每一列的类型,列的类型例如包括数值类型、时间类型或字符类型等。服务器可以基于数据存储特征记录的每一列的类型,确定其中为字符类型的列,将该列存储的内容作为各个数据各自的索引信息。数据存储特征还可以记录了目标数据单元每一列是否存在指定标记,服务器可以将存在指定标记的列中存储的内容,作为各个数据各自的索引信息。数据存储特征还可以记录了目标数据单元每一列中存储的内容是否存在重复的内容,服务器可以将不存在重复内容的列中包含的内容,作为各个数据各自的索引信息等,具体确定索引信息的方法不做具体限制。
在获得各个索引信息之后,服务器可以基于各个索引信息,对各个数据进行分组,生成多个数据分片,每个数据分片包含至少一个数据。一个数据分片涉及的至少一个数据之间存在相关性,例如,一个数据分片涉及的至少一个数据各自的索引信息相同或相似,又例如,索引信息存在先后顺序时,一个数据分片涉及的至少一个数据各自的索引信息的排序相邻等,具体不做限制。
作为一种实施例,索引信息的信息类型为数值类型或时间类型时,那么服务器可以基于索引信息的取值大小,生成多个数据分片。服务器可以基于各个索引信息的取值分布,确定包含各个索引信息的取值区间,例如,索引信息的取值分布在0到50之间,最大值为50,最小值为0,那么可以确定包含各个索引信息的取值区间为[0,50]。
在确定了取值区间之后,服务器可以将取值区间,划分为指定数量的多个子区间。指定数量可以与数据传输通道相关,具体可以参考前文的介绍;也可以预先根据经验值设定等,具体不做限制。例如,在获得了取值区间为[0,50]之后,服务器可以将取值区间划分为三个子区间,依次为[0,10]、[10,40]和[40,50]。
作为一种实施例,每个子区间的临界值可以基于各个索引信息的取值分布确定,例如,[0,10]之间包含10个数据,[10,20]之间包含2个数据,[20,30]之间包含3个数据,[30,40]之间包含5个数据,[40,50]之间包含10个数据,那么以包含的数据的数据量均为10个,来划分出三个子区间,即为[0,10]、[10,40]和[40,50]。
在获得了多个子区间之后,服务器可以分别将各个数据中,对应的索引信息属于同一子区间的数据分为一组,获得多个数据分片。继续以前文的例子为例,在获得[0,10]、[10,40]和[40,50]三个子区间之后,服务器可以将[0,10]包含的各个数据分为一组,得到一个数据分片,将[10,40]包含的各个数据分为一组,得到一个数据分片,将[40,50]包含的各个数据分为一组,得到一个数据分片,一共获得三个数据分片。
在获得多个数据分片之后,服务器可以基于多个数据分片,分别对查询条件进行子条件划分,获得多个数据分片各自对应的子条件。下面以一个数据分片为例,对子条件划分过程示例介绍,其他数据分片类似,在此不再赘述。
基于一个数据分片涉及的至少一个数据,将查询条件划分为多个备选子条件,其中,每个备选子条件用于指示查询一个数据分片中的一个数据,或者,用于指示查询除了至少一个数据以外的数据。例如,查询条件用于指示查询目标数据单元中,col2列取值在0到10之间的数据时,一个数据分片涉及的至少一个数据以三个数据为例,三个数据各自col2列取值分别为2、3和8,那么可以将查询条件划分为四个备选子条件,第一备选子条件用于指示查询col2列取值为2的数据,第二备选子条件用于指示查询col2列取值为3的数据,第三备选子条件用于指示查询col2列取值为8的数据,第四备选子条件用于指示查询col2列取值为1、4~7和9~10的数据。
在获得多个备选子条件之后,服务器可以基于指示查询一个数据分片中的一个数据的各个备选子条件的并集,获得数据分片对应的子条件。例如,在获得第一备选子条件用于指示查询col2列取值为2的数据,第二备选子条件用于指示查询col2列取值为3的数据,第三备选子条件用于指示查询col2列取值为8的数据,第四备选子条件用于指示查询col2列取值为1、4~7和9~10的数据之后,服务器可以将第一备选子条件、第二备选子条件和第三备选子条件的并集,即指示查询col2列取值为2~3和8的数据作为数据分片对应的子条件。
在获得多个子条件之后,服务器可以对应多个子条件,分别生成相应的子查询语句。以一个子条件为例,服务器可以将目标查询语句中的查询条件,替换为一个子条件,生成子查询语句,例如,目标查询语句“select col1,col2 from userA.mysql.db1.table1where col2>0”,其中,查询条件为“where col2>0”,一个子条件为“where 0<col2<10”,那么服务器可以将目标查询语句中的查询条件,替换为一个子条件,获得“select col1,col2from userA.mysql.db1.table1 where col2>0”,即为相应的子查询语句。
服务器还可以先选取目标查询语句中,该一个子条件对应的目标数据源对应的部分查询语句,将部分查询语句中的查询条件,替换为该一个子条件,生成子查询语句。例如,目标查询语句“select*from(select col1,col2 from userA.mysql.db1.table1 wherecol2>0)a join(select col3,col4 from userA.oracle.db2.table2 where col4<0)b ona.col1=b.col3”,一个子条件为“where 0<col2<10”,该一个子条件对应的目标数据源是mysql,那么选取目标查询语句中该一个子条件对应的部分查询语句为“select col1,col2from userA.mysql.db1.table1 where col2>0”。那么服务器可以将该部分查询语句中的查询条件,替换为该一个子条件,获得“select col1,col2 from userA.mysql.db1.table1where col2>0”,即为相应的子查询语句。
作为一种实施例,在生成了子条件对应的子查询语句之后,服务器可以预设的数据查询验证策略,对子查询语句进行语句验证,在进行语句验证之后,服务器可以获得子查询语句的验证结果。验证结果用于表征基于子查询语句,是否可以从相应的目标数据单元获取到子查询语句包含的子条件指示查询的子数据,例如,验证结果可以表征子查询语句是否存在语法错误,验证结果还可以表征子查询语句是否可以应用于查询目标数据单元中的数据等。子查询语句存在语法错误可以是词语拼写错误、短语关联错误等,具体不做限制;无法应用于查询目标数据单元中的数据可以是,子查询语句包含的子条件与目标数据单元包含的列的名称不对应,或子条件与目标数据单元包含的列的类型不对应等,具体不做限制。
服务器确定验证结果表征基于子查询语句,可以从相应的目标数据单元获取到子查询语句包含的子条件指示查询的子数据时,说明子查询语句的语句验证通过,获得子条件对应的子查询语句。服务器确定验证结果表征基于子查询语句,无法从相应的目标数据单元获取到子查询语句包含的子条件指示查询的子数据时,说明子查询语句的语句验证失败时,可以基于语句验证失败原因,对子查询语句进行修正,获得修正后的子查询语句,在修正后的子查询语句语句验证通过时,将修正后的子查询语句,作为子条件对应的子查询语句。
作为一种实施例,基于语句验证失败原因,对子查询语句进行修正,可以是在语句验证失败原因表征语法错误时,服务器基于数据查询验证策略,检查每个字符串拼写是否正确,标点符号是否正确等。如果存在错误,那么可以基于与错误的字符串最相似的字符串,修正错误的字符串;也可以基于正确的标点符号,修正错误的标点符号。
基于语句验证失败原因,对子查询语句进行修正,还可以是在语句验证失败原因表征逻辑错误时,服务器基于数据查询验证策略,检查每个字符串表征的目标对象、数据源、数据表、列等,在服务器中是否存在对应名称和类型的目标对象、数据源、数据表、列等。如果存在错误,那么可以基于与错误的字符串最相似的字符串,修正错误的字符串等,具体不做限制。
作为一种实施例,在获得目标查询语句之后,服务器可以先确定该目标查询语句是否可以进行子条件划分,在确定目标查询语句可以进行子条件划分时,再继续执行S202~S204的方法。在确定目标查询语句不能进行子条件划分时,可以不再继续执行S202~S204的方法。
确定目标查询语句是否可以进行子条件划分的方法有多种,例如,在确定目标数据单元的数据存储特征表征目标数据源包含唯一表征每个数据的索引信息时,如包含索引或分区时,确定目标查询语句可以进行子条件划分。
又例如,确定目标查询语句中只包含简单的select查询,不包含join、union、intersect、minus等查询操作时,确定目标查询语句可以进行子条件划分。又例如,确定目标查询语句中不包含order查询操作,或order查询操作中不涉及limit、offset等操作时,确定目标查询语句可以进行子条件划分。又例如,确定目标查询语句中不包含over窗口时,确定目标查询语句可以进行子条件划分。又例如,确定目标查询语句中不包含聚合函数时,确定目标查询语句可以进行子条件划分。又例如,确定目标查询语句中where操作由and组成,或涉及逻辑大于等于、小于等于、大于、小于、等于,以及between and时,确定目标查询语句可以进行子条件划分。
S203,通过多个子查询语句各自对应的数据传输通道,从至少一个目标数据单元中,分别获取多个子查询语句各自指示查询的子数据。
在获得多个子查询语句之后,服务器可以针对多个子查询语句,分别建立相应的数据传输通道,例如,建立JDBC连接,每个子查询语句指示查询的子数据,可以通过相应的数据传输通道进行传输,从而,服务器可以通过多个子查询语句各自对应的数据传输通道,从至少一个目标数据单元中,并发获取多个子查询语句各自指示查询的子数据,避免了循环多次查询过程,循环占用一个数据查询通道的过程,多个子数据可以同时获得,提高了数据查询的效率。
例如,请参考图4b,服务器获得三个子查询语句,依次为“select col1,col2fromuserA.mysql.db1.table1 where 0<col2<10”、“select col1,col2 fromuserA.mysql.db1.table1 where 10<col2<20”和“select col1,col2 fromuserA.mysql.db1.table1 where 20<col2<30”。服务器可以通过三个子查询语句,从数据仓库向关系型数据库查询相应的子数据。
服务器分别针对每个子查询语句建立一个数据传输通道,依次为第一数据传输通道、第二数据传输通道和第三数据传输通道。
服务器通过三个子查询语句各自对应的数据传输通道,从数据仓库向关系型数据库获取子查询语句对应的子数据。通过子查询语句“select col1,col2 fromuserA.mysql.db1.table1 where 0<col2<10”,对应的第一数据传输通道,从数据仓库向关系型数据库,获取ID为3、4和5的子数据;通过子查询语句“select col1,col2 fromuserA.mysql.db1.table1 where 10<col2<20”,对应的第二数据传输通道,从数据仓库向关系型数据库,获取ID为1的子数据;通过子查询语句“select col1,col2 fromuserA.mysql.db1.table1 where 20<col2<30”,对应的第一数据传输通道,从数据仓库向关系型数据库,获取ID为2的子数据。
作为一种实施例,通过子查询语句获取子数据的过程,可以通过数据视图实现,数据视图可以直观地展示子查询语句指示查询的子数据。服务器可以基于一个子查询语句指示查询的目标数据单元,将一个子查询语句,映射为一个数据视图,其中,一个数据视图用于表征一个子查询语句指示查询的子数据的数据存储地址。服务器在基于一个子查询语句,建立一个数据传输通道之后,可以基于一个数据视图表征的数据存储地址,通过数据传输通道,获取一个子查询语句指示查询的子数据。
S204,对获得的多个子数据进行合并处理,生成目标查询语句指示查询的目标数据。
在获得多个子数据之后,服务器可以对获得的多个子数据进行合并处理,生成目标查询语句指示查询的目标数据。服务器直接将多个子查询语句,如子查询语句A、子查询语句B、……、子查询语句N,发送至目标数据源,同时通过相应的数据传输通道获得相应的子数据,如子数据A、子数据B、……、子数据N时,服务器可以在获得多个子数据之后,将获得的多个子数据合并为目标数据,如将子数据A、子数据B、……、子数据N合并为目标数据。
请参考图4c,服务器可以采用计算引擎将多个子查询语句,如子查询语句A、子查询语句B、……、子查询语句N,分别下推给相应的目标数据源。服务器可以将多个子查询语句各自映射为数据视图,如子查询语句A映射为数据视图A、子查询语句B映射为数据视图B、……、子查询语句N映射为数据视图N。多个子查询语句各自对应的数据视图,可以组成与目标查询语句等价的查询指令,计算引擎可以通过该等价的查询指令,向目标数据源查询目标数据,同时通过相应的数据传输通道获得相应的子数据,如子数据A、子数据B、……、子数据N,服务器可以将获得的多个子数据合并为目标数据。
作为一种实施例,本申请实施例提供的数据查询方法,可以在将相应参数,如supersql.subquery.concurrent.enable参数,设定为指定值,如设定为true之后,服务器才会默认执行该数据查询方法,在相应参数没有设定为指定值时,服务器不会默认执行该数据查询方法。
下面对本申请实施例提供的数据查询方法进行示例介绍。
请参考图5a,服务器包含检验模块、子条件划分模块、并发传输模块和合并模块。检验模块用于检验获得的目标查询语句是否可以采用本申请提供的数据查询方法进行数据查询操作;子条件划分模块用于对目标查询语句包含的查询条件划分为多个子条件,并生成多个子条件各自对应的子查询语句;并发传输模块用于基于多个子条件各自对应的子查询语句,查询相应的子数据;合并模块用于对获得的多个子数据进行合并处理,获得目标数据。
请参考图5b,子条件划分模块包含主划分子模块和副划分子模块,其中,副划分子模块可以对目标查询语句进行解析,确定目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合查询条件的至少一个目标数据单元;副划分子模块还可以获取相应目标数据单元的数据存储特征,例如,包括表量级大小,以及列类型、列最大值、列最小值、列空值数量、列不同值的数量等基本列信息;又例如,包括目标数据单元存储的各个数据各自的索引信息等。
副划分子模块可以将获得的信息发送给主划分子模块,主划分子模块可以基于获得的信息,分别对查询条件进行子条件划分,获得多个子条件。主划分子模块可以将得到的多个子条件发送给副划分子模块,由副划分子模块针对多个子条件,生成相应的子查询语句。
下面对本申请实施例提供的数据查询方法的具体过程进行示例介绍,请参考图6a。
S601,客户端响应于目标对象的输入操作,获得目标查询语句“select*from(select col1,col2 from userA.mysql.db1.table1 where col2>0)a join(selectcol3,col4 from userA.oracle.db2.table2 where col4<0)b on a.col1=b.col3”。客户端向服务器发送目标查询语句,服务端接收客户端发送的目标查询语句。目标查询语句用于从数据参考向关系型数据库获取目标数据。
S602,在获得目标查询语句之后,服务器对目标查询语句进行解析,请参考图6b,服务器确定目标数据源包括Mysql和Oracle。目标数据源Mysql中,符合查询条件的目标数据单元请参考表1;目标数据源Oracle中,符合查询条件的目标数据单元请参考表2。
表1
ID | col1 | col2 | remark |
1 | 5 | 15 | 5 |
2 | 12 | 21 | 3 |
3 | 66 | 6 | 7 |
4 | -2 | 8 | 3 |
5 | -15 | 3 | 2 |
…… | …… | …… | …… |
表2
S603,在获得两个目标数据单元之后,服务器获取预存的两个目标数据单元各自的数据存储特征。表1对应的目标数据单元包含5行4列,每列均为数值类型,第一列具有标记,且最大值为5、最小值为1,第二列最大值为66、最小值为-15,第三列最大值为21、最小值为3,第四列最大值为7、最小值为2。表2对应的目标数据单元包含5行4列,每列均为数值类型,第一列具有标记,且最大值为5、最小值为1,第二列最大值为62、最小值为-9,第三列最大值为9、最小值为-20,第四列最大值为8、最小值为3。
S604,在获得两个目标数据单元各自的数据存储特征之后,服务器基于数据存储特征,确定第一列具有标记,那么两个目标数据单元中存储的各个数据各自的索引信息,为各个数据各自的ID。服务器基于两个目标数据单元各自包含的各个数据的ID,分别对两个目标数据单元各自包含的符合查询条件的各个数据进行分组,分别获得相应的多个数据分片。
请参考图6c,对于表1对应的目标数据单元中符合查询条件的各个数据,第一列最大值为5、最小值为1,服务器可以确定ID的取值分布在1~5之间,从而获得取值区间为[1,5]。服务器将取值区间划分为两个子区间,即[1,2]和[3,5],从而,服务器将ID为1和ID为2的两条数据分为一组,获得一个数据分片;将ID为3、ID为4和ID为5的三条数据分为一组,获得一个数据分片。对于表2对应的目标数据单元中符合查询条件的各个数据,同理,服务器将ID为1和ID为2的两条数据分为一组,获得一个数据分片;将ID为3、ID为4和ID为5的三条数据分为一组,获得一个数据分片。
S605,在获得多个数据分片之后,服务器可以基于每个数据分片涉及的至少一个数据,将查询条件划分为多个备选子条件,以ID为1和ID为2的两条数据为例,请参考图6d,查询条件为“where col2>0”,ID为1和ID为2的两条数据各自在col2列的取值为15和21,那么服务器划分出的多个备选子条件可以包括“where 0<col2<10”,“where 10<col2<20”,“where 20<col2<30”,以及“where col2>30”,备选子条件“where 10<col2<20”用于指示查询ID为1的一条数据,备选子条件“where 20<col2<30”用于指示查询ID为2的一条数据,备选子条件“where 0<col2<10”和“where col2>30”用于指示查询除了ID为1和ID为2的两条数据以外的其他数据。
服务器可以基于“where 10<col2<20”,“where 20<col2<30”两个备选子条件的并集,即“where 10<col2≤30”,确定该数据分片对应的子条件。同理,获得其他数据分片各自对应的子条件。
S606,在获得多个子条件之后,服务器依次针对每个子条件,基于目标查询语句中针对相应目标数据源的部分查询语句,将包含的查询条件,替换为子条件,生成相应的子查询语句。例如,请参考图6e,针对子条件“where10<col2≤30”,目标查询语句中针对目标数据源Mysql的查询语句为“select col1,col2 from userA.mysql.db1.table1 where col2>0”。服务器将“select col1,col2 from userA.mysql.db1.table1 where col2>0”中的查询条件“where col2>0”替换为子条件,得到子查询语句“select col1,col2 fromuserA.mysql.db1.table1 where10<col2≤30”。同理得到其他子查询语句。
S607,在获得四个子查询语句之后,服务器通过四个子查询语句各自对应的数据传输通道,从数据仓库的相应的目标数据单元中,分别获取四个子查询语句各自指示查询的子数据。服务器将四个子数据通过各自对应的数据传输通道,从数据仓库发送至关系型数据库。服务器将发送至关系型数据库的四个子数据,合并为目标数据,使得关系型数据库得到目标查询语句指示查询的目标数据。
基于同一发明构思,本申请实施例提供一种数据查询装置,能够实现前述的数据查询方法对应的功能。请参考图7,该装置包括获取模块701和处理模块702,其中:
获取模块701:用于获取目标查询语句,并对目标查询语句进行解析,确定目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合目标查询语句包含的查询条件的至少一个目标数据单元;
处理模块702:用于基于获得的至少一个目标数据单元的数据存储特征,分别对查询条件进行子条件划分,获得多个子条件,以及分别生成多个子条件各自对应的子查询语句;
处理模块702还用于:通过多个子查询语句各自对应的数据传输通道,从至少一个目标数据单元中,分别获取多个子查询语句各自指示查询的子数据;
处理模块702还用于:对获得的多个子数据进行合并处理,生成目标查询语句指示查询的目标数据。
在一种可能的实施例中,目标数据单元中存储的各个数据各自具有的索引信息,每个索引信息用于唯一表征目标数据单元中的一个数据或一组数据;
处理模块702具体用于:
针对至少一个目标数据单元,分别执行以下操作:
基于一个目标数据单元的数据存储特征,确定一个目标数据单元符合查询条件的多个数据各自的索引信息;
基于各个索引信息,对所述多个数据进行分组,生成多个数据分片,其中,每个数据分片包含至少一个数据;
基于多个数据分片,对查询条件进行子条件划分,获得多个数据分片各自对应的子条件。
在一种可能的实施例中,索引信息的信息类型为数值类型或时间类型时,处理模块702具体用于:
基于各个索引信息的取值分布,确定包含各个索引信息的取值区间;
将取值区间,划分为指定数量的多个子区间;
分别将多个数据中,对应的索引信息属于同一子区间的数据分为一组,获得多个数据分片。
在一种可能的实施例中,处理模块702具体用于:
针对多个数据分片,分别执行以下操作:
基于一个数据分片涉及的至少一个数据,将查询条件划分为多个备选子条件,其中,每个备选子条件用于指示查询一个数据分片中的一个数据,或者,用于指示查询除了至少一个数据以外的数据;
基于指示查询一个数据分片中的一个数据的各个备选子条件的并集,获得数据分片对应的子条件。
在一种可能的实施例中,处理模块702具体用于:
针对多个子条件,分别执行以下操作:
将目标查询语句中的查询条件,替换为一个子条件,生成子查询语句;
基于预设的数据查询验证策略,对子查询语句进行语句验证,获得子查询语句的验证结果,其中,验证结果用于表征基于子查询语句,是否可以从相应的目标数据单元获取到一个子条件指示查询的子数据;
确定验证结果表征基于子查询语句,可以从相应的目标数据单元获取到一个子条件指示查询的子数据时,获得子条件对应的子查询语句。
在一种可能的实施例中,处理模块702具体用于:
针对多个子查询语句,分别执行以下操作:
基于一个子查询语句指示查询的目标数据单元,将一个子查询语句,映射为一个数据视图,其中,一个数据视图用于表征一个子查询语句指示查询的子数据的数据存储地址;
基于一个子查询语句,建立一个数据传输通道;
基于一个数据视图表征的数据存储地址,通过数据传输通道,获取一个子查询语句指示查询的子数据。
请参照图8,上述数据查询装置可以运行在计算机设备800上,数据存储程序的当前版本和历史版本以及数据存储程序对应的应用软件可以安装在计算机设备800上,该计算机设备800包括处理器880以及存储器820。在一些实施例中,该计算机设备800可以包括显示单元840,显示单元840包括显示面板841,用于显示由用户交互操作界面等。
在一种可能的实施例中,可以采用液晶显示器(Liquid Crystal Display,LCD)或有机发光二极管OLED(Organic Light-Emitting Diode)等形式来配置显示面板841。
处理器880用于读取计算机程序,然后执行计算机程序定义的方法,例如处理器880读取数据存储程序或文件等,从而在该计算机设备800上运行数据存储程序,在显示单元840上显示对应的界面。处理器880可以包括一个或多个通用处理器,还可包括一个或多个DSP(Digital Signal Processor,数字信号处理器),用于执行相关操作,以实现本申请实施例所提供的技术方案。
存储器820一般包括内存和外存,内存可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等。外存可以为硬盘、光盘、USB盘、软盘或磁带机等。存储器820用于存储计算机程序和其他数据,该计算机程序包括各客户端对应的应用程序等,其他数据可包括操作系统或应用程序被运行后产生的数据,该数据包括系统数据(例如操作系统的配置参数)和用户数据。本申请实施例中程序指令存储在存储器820中,处理器880执行存储器820中的程序指令,实现前文图论述的任意的一种方法。
上述显示单元840用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与计算机设备800的用户设置以及功能控制有关的信号输入等。具体地,本申请实施例中,该显示单元840可以包括显示面板841。显示面板841例如触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在显示面板841上或在显示面板841的操作),并根据预先设定的程式驱动相应的连接装置。
在一种可能的实施例中,显示面板841可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测玩家的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器880,并能接收处理器880发来的命令并加以执行。
其中,显示面板841可以采用电阻式、电容式、红外线以及表面声波等多种类型实现。除了显示单元840,在一些实施例中,计算机设备800还可以包括输入单元830,输入单元830可以包括图像输入设备831和其他输入设备832,其中其他输入设备可以但不限于包括物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
除以上之外,计算机设备800还可以包括用于给其他模块供电的电源890、音频电路860、近场通信模块870和RF电路810。计算机设备800还可以包括一个或多个传感器850,例如加速度传感器、光传感器、压力传感器等。音频电路860具体包括扬声器861和麦克风862等,例如计算机设备800可以通过麦克风862采集用户的声音,进行相应的操作等。
作为一种实施例,处理器880的数量可以是一个或多个,处理器880和存储器820可以是耦合设置,也可以是相对独立设置。
作为一种实施例,图8中的处理器880可以用于实现如图7中的获取模块701和处理模块702的功能。
作为一种实施例,图8中的处理器880可以用于实现前文论述的服务器或终端设备对应的功能。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,例如,通过计算机程序产品体现,该计算机程序产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种数据查询方法,其特征在于,包括:
获取目标查询语句,并对所述目标查询语句进行解析,确定所述目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合所述目标查询语句包含的查询条件的至少一个目标数据单元;
基于获得的至少一个目标数据单元的数据存储特征,分别对所述查询条件进行子条件划分,获得多个子条件,以及分别生成所述多个子条件各自对应的子查询语句;
通过多个子查询语句各自对应的数据传输通道,从所述至少一个目标数据单元中,分别获取所述多个子查询语句各自指示查询的子数据;
对获得的多个子数据进行合并处理,生成所述目标查询语句指示查询的目标数据。
2.根据权利要求1所述的方法,其特征在于,所述目标数据单元中存储的各个数据各自具有的索引信息,每个索引信息用于唯一表征所述目标数据单元中的一个数据或一组数据;
所述基于获得的至少一个目标数据单元的数据存储特征,分别对所述查询条件进行子条件划分,获得多个子条件,包括:
针对所述至少一个目标数据单元,分别执行以下操作:
基于一个目标数据单元的数据存储特征,确定所述一个目标数据单元符合所述查询条件的多个数据各自的索引信息;
基于各个索引信息,对所述多个数据进行分组,生成多个数据分片,其中,每个数据分片包含至少一个数据;
基于所述多个数据分片,对所述查询条件进行子条件划分,获得所述多个数据分片各自对应的子条件。
3.根据权利要求2所述的方法,其特征在于,所述索引信息的信息类型为数值类型或时间类型时,所述基于各个索引信息,对所述多个数据进行分组,生成多个数据分片,包括:
基于所述各个索引信息的取值分布,确定包含所述各个索引信息的取值区间;
将所述取值区间,划分为指定数量的多个子区间;
分别将所述多个数据中,对应的索引信息属于同一子区间的数据分为一组,获得所述多个数据分片。
4.根据权利要求2所述的方法,其特征在于,所述基于所述多个数据分片,对所述查询条件进行子条件划分,获得所述多个数据分片各自对应的子条件,包括:
针对所述多个数据分片,分别执行以下操作:
基于一个数据分片涉及的至少一个数据,将所述查询条件划分为多个备选子条件,其中,每个备选子条件用于指示查询所述一个数据分片中的一个数据,或者,用于指示查询除了所述至少一个数据以外的数据;
基于指示查询所述一个数据分片中的一个数据的各个备选子条件的并集,获得所述数据分片对应的子条件。
5.根据权利要求1~4任一项所述的方法,其特征在于,分别生成所述多个子条件各自对应的子查询语句,包括:
针对所述多个子条件,分别执行以下操作:
将所述目标查询语句中的查询条件,替换为一个子条件,生成子查询语句;
基于预设的数据查询验证策略,对所述子查询语句进行语句验证,获得所述子查询语句的验证结果,其中,所述验证结果用于表征基于所述子查询语句,是否可以从相应的目标数据单元获取到所述一个子条件指示查询的子数据;
确定所述验证结果表征基于所述子查询语句,可以从相应的目标数据单元获取到所述一个子条件指示查询的子数据时,获得所述子条件对应的子查询语句。
6.根据权利要求1~4任一项所述的方法,其特征在于,所述通过多个子查询语句各自对应的数据传输通道,从所述至少一个目标数据单元中,分别获取所述多个子查询语句各自指示查询的子数据,包括:
针对所述多个子查询语句,分别执行以下操作:
基于一个子查询语句指示查询的目标数据单元,将所述一个子查询语句,映射为一个数据视图,其中,所述一个数据视图用于表征所述一个子查询语句指示查询的子数据的数据存储地址;
基于所述一个子查询语句,建立一个数据传输通道;
基于所述一个数据视图表征的数据存储地址,通过所述数据传输通道,获取所述一个子查询语句指示查询的子数据。
7.一种数据查询装置,其特征在于,包括:
获取模块:用于获取目标查询语句,并对所述目标查询语句进行解析,确定所述目标查询语句指示查询的至少一个目标数据源,以及每个目标数据源中,符合所述目标查询语句包含的查询条件的至少一个目标数据单元;
处理模块:用于基于获得的至少一个目标数据单元的数据存储特征,分别对所述查询条件进行子条件划分,获得多个子条件,以及分别生成所述多个子条件各自对应的子查询语句;
所述处理模块还用于:通过多个子查询语句各自对应的数据传输通道,从所述至少一个目标数据单元中,分别获取所述多个子查询语句各自指示查询的子数据;
所述处理模块还用于:对获得的多个子数据进行合并处理,生成所述目标查询语句指示查询的目标数据。
8.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1~6所述方法的步骤。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如权利要求1~6中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1~6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210173485.9A CN116701443A (zh) | 2022-02-24 | 2022-02-24 | 一种数据查询方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210173485.9A CN116701443A (zh) | 2022-02-24 | 2022-02-24 | 一种数据查询方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116701443A true CN116701443A (zh) | 2023-09-05 |
Family
ID=87829843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210173485.9A Pending CN116701443A (zh) | 2022-02-24 | 2022-02-24 | 一种数据查询方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116701443A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116910099A (zh) * | 2023-09-06 | 2023-10-20 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN117331970A (zh) * | 2023-10-31 | 2024-01-02 | 中科驭数(北京)科技有限公司 | 数据查询方法、装置、计算机存储介质及加速卡 |
CN117349323A (zh) * | 2023-12-05 | 2024-01-05 | 苏州元脑智能科技有限公司 | 数据库的数据处理方法及装置、存储介质及电子设备 |
-
2022
- 2022-02-24 CN CN202210173485.9A patent/CN116701443A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116910099A (zh) * | 2023-09-06 | 2023-10-20 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN116910099B (zh) * | 2023-09-06 | 2023-11-17 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN117331970A (zh) * | 2023-10-31 | 2024-01-02 | 中科驭数(北京)科技有限公司 | 数据查询方法、装置、计算机存储介质及加速卡 |
CN117349323A (zh) * | 2023-12-05 | 2024-01-05 | 苏州元脑智能科技有限公司 | 数据库的数据处理方法及装置、存储介质及电子设备 |
CN117349323B (zh) * | 2023-12-05 | 2024-02-27 | 苏州元脑智能科技有限公司 | 数据库的数据处理方法及装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11580070B2 (en) | Utilizing metadata to prune a data set | |
CN107480198B (zh) | 一种分布式NewSQL数据库系统和全文检索方法 | |
CN116701443A (zh) | 一种数据查询方法、装置、计算机设备及存储介质 | |
US10402421B2 (en) | Systems and methods for interest-driven data sharing in interest-driven business intelligence systems | |
JP6338817B2 (ja) | データベースミドルウェアを用いたデータ管理システム及びその方法 | |
US10706022B2 (en) | Space-efficient secondary indexing on distributed data stores | |
US20110066617A1 (en) | Spatial querying in a data warehouse | |
US8046352B2 (en) | Expression replacement in virtual columns | |
US10083223B2 (en) | Identification of common attributes in multiple datasets | |
US20140149450A1 (en) | Flexible tables | |
US9984081B2 (en) | Workload aware data placement for join-based query processing in a cluster | |
US12050605B2 (en) | Indexed geospatial predicate search | |
US20140379691A1 (en) | Database query processing with reduce function configuration | |
WO2019205790A1 (zh) | 一种数据操作方法及装置 | |
CN113704300B (zh) | 供数据检索方法使用的数据印记技术 | |
US10713284B2 (en) | Platform-based data segregation | |
CN115918110A (zh) | 使用键值存储库的空间搜索 | |
US9870399B1 (en) | Processing column-partitioned data for row-based operations in a database system | |
US11016973B2 (en) | Query plan execution engine | |
CN114490724B (zh) | 处理数据库查询语句的方法和装置 | |
CN112818010B (zh) | 数据库查询方法及装置 | |
US11803568B1 (en) | Replicating changes from a database to a destination and modifying replication capacity | |
WO2008055202A2 (en) | System and method for distributing queries to a group of databases and expediting data access | |
US20200320076A1 (en) | Determination of query operator execution location | |
US11995080B1 (en) | Runtime join pruning to improve join performance for database tables |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |