CN110019341B - 一种数据查询方法及装置 - Google Patents
一种数据查询方法及装置 Download PDFInfo
- Publication number
- CN110019341B CN110019341B CN201711295212.7A CN201711295212A CN110019341B CN 110019341 B CN110019341 B CN 110019341B CN 201711295212 A CN201711295212 A CN 201711295212A CN 110019341 B CN110019341 B CN 110019341B
- Authority
- CN
- China
- Prior art keywords
- weight coefficient
- cost
- calculating
- join
- plan tree
- 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.)
- Active
Links
Images
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/24542—Plan optimisation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据查询方法及装置,方法包括:获取查询请求;根据所述查询请求建立至少一个计划树;根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;按照代价最低的计划树查询数据。应用本申请实施例,提高了数据查询效率。
Description
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据查询方法及装置。
背景技术
随着计算机技术的快速发展,电子数据激增。为了便于快速查询数据,基于结构化查询语言(Structured Query Language,SQL)的数据查询系统,如Google Dremel、Cloudera Impala、Berkeley Shark、Apache Drill等应运而生。
目前,利用数据查询系统查询数据时,用户将查询请求输入数据查询系统,数据查询系统基于查询请求可能建立执行计划,根据执行计划查询数据。
在数据查询系统在查询数据时,对执行计划进行代价估计,确定执行计划的最佳的连接顺序,也就是确定出耗时最少的执行计划,进而提高查询效率。但由于执行计划的代价估算不准确,也就无法有效的提高查询效率。
发明内容
本申请实施例的目的在于提供一种数据查询方法及装置,以提高数据查询效率。具体技术方案如下:
一方面,本申请实施例提供了一种数据查询方法,所述方法包括:
获取查询请求;
根据所述查询请求建立至少一个计划树;
根据预设的网络传输权重系数、输入(Input,I)/输出(Output,O)权重系数和中央处理器(Central Processing Unit,CPU)计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,所述计划树中包括扫描(scan)操作、过滤(filter)操作、投影(project)操作、广播连接(broatcast join)操作、洗牌哈希连接(shuffle hashjoin)操作、排序合并连接(sort merge join)操作和分组(group by)操作中的一种或多种;
所述根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价的步骤,包括:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,所述根据预设的I/O权重系数,计算每个计划树中scan操作的代价的步骤,包括:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,所述根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价的步骤,包括:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,所述根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价的步骤,包括:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,通过以下方式确定根据所述查询请求从作为project操作对象的表中选择行的概率:
根据预先存储的各个表的列信息,确定根据所述查询请求中每一个条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,所述列信息还包括:最大值和最小值。
在本申请的一个实施例中,所述根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率的步骤,包括:
若所述查询请求中条件表达式间的运算符为且(and),则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或(or),则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择根据的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
在本申请的一个实施例中,所述根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价的步骤,包括:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务(map task)的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,所述根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器(reducer)的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,所述根据得到的每个计划树中每一操作的代价,确定每个计划树的代价的步骤,包括:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
二方面,本申请实施例提供了一种数据查询装置,所述装置包括:
获取单元,用于获取查询请求;
建立单元,用于根据所述查询请求建立至少一个计划树;
第一确定单元,用于根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
查询单元,用于按照代价最低的计划树查询数据。
在本申请的一个实施例中,所述第一确定单元,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,所述计划树中包括scan操作、filter操作、project操作、broatcast join操作、shuffle hash join操作、sort merge join操作和group by操作中的一种或多种;
所述计算子单元,具体用于:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数,计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,所述装置还包括:第二确定单元,用于确定根据所述查询请求从作为project操作对象的表中选择行的概率;
所述第二确定单元,包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据所述查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,所述列信息还包括:最大值和最小值。
在本申请的一个实施例中,所述第三确定子单元,具体用于:
若所述查询请求中条件表达式间的运算符为and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,所述第一确定子单元,具体用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
三方面,本申请实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线;其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现上述的数据查询方法步骤。
四方面,本申请实施例提供了一种机器可读存储介质,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据查询方法步骤。
本申请实施例中,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。当然,实施本申请的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据查询方法的一种流程示意图;
图2为本申请实施例提供的计划树的一种示意图;
图3为本申请实施例提供的计划树的另一种示意图;
图4为本申请实施例提供的数据查询装置的一种结构示意图;
图5为本申请实施例提供的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了提高数据查询效率,本申请实施例提供了一种数据查询方法及装置。参考图1,图1为本申请实施例提供的数据查询方法的一种流程示意图,该方法可以应用于服务器、存储器等设备中。该方法包括:
步骤101:获取查询请求;
其中,查询请求可以为一条SQL查询语句,例如select p.name,p.age,a.cityfrom people as p inner join address as a on p.name=a.name where p.age=20and
a.city='Shanghai'order by p.name。
查询请求可以包括运算符、操作等元素,其中,运算符可以包括且(and)、或(or)等,操作包括扫描(scan)操作、过滤(filter)操作、投影(project)操作、广播连接(broatcast join)操作、洗牌哈希连接(shuffle hash join)操作、排序合并连接(sortmerge join)操作和分组(group by)操作等操作中的一种或多种。
假设,用户需要查询表A的a列中取值为'a0'并且表B的b列中取值为'b0'的数据,和表A的a列中取值为'a1'并且表B的b列中取值为'b1'的数据,那么查询请求可以为:(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1')。
步骤102:根据查询请求建立至少一个计划树;
仍以步骤101中的例子进行说明,若获取到查询请求后,解析该查询请求后获得:(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1'),则建立的一个计划树如图2所示;
其中,relation:表示拉取某个表的数据,如图2中左下方relation操作中的A表示拉取表A的数据,图2中右下方relation操作中的B表示拉取表B的数据;
join:表示对左右操作做一个连接操作,该操作指定查询请求;如图2中join操作中的查询请求为(A.a='a0'and B.b='b0')or(A.a='a1'and B.b='b1');
project:表示做投影操作,该操作指定需要投影的列名;如图2上方project操作下方的“A.a,B.b”表示需要投影A表中的a列和B表中的b列。
步骤103:根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
数据查询系统设置在设备集群上,不同的设备集群环境中,硬件配置不同,网络传输、磁盘的I/O和CPU的性能有所差别,这些差别可以以权重系数的形式配置在设备的属性文件中,比如磁盘I/O耗时比较长,可以配置I/O权重系数为100,CPU的计算时间很短,可以配置CPU计算权重系数为0.1。
根据网络传输权重系数可以计算出计划树的网络传输代价,根据I/O权重系数可以计算出计划树的I/O代价,根据CPU计算权重系数可以计算出计划树的CPU计算代价,网络传输、I/O和CPU计算为数据查询时的主要开销,因此,通过计划树的网络传输代价、I/O代价和CPU计算代价,可以准确的确定出计划树的代价。
在本申请的一个实施例中,每个计划树中包括多种操作,如图2所示的计划树中包括join操作和project操作,每种操作在查询数据时均需要消耗时间,根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树中每一操作的代价;根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,对于每一计划树,可以统计该计划树中操作的代价的和,将获得的代价和作为该计划树的代价。
在本申请的另一个实施例中,一个计划树可以分为多个阶段(stage),若这多个stage中存在可以并行执行的stage,对每一stage,可以统计该stage包括操作的代价的和,将获得的代价和作为该stage的代价;对于可并行执行的stage的代价,过滤掉可并行执行的stage的代价中非最大的代价;最后,统计剩余stage的代价的和,获得该计划树的代价。
例如,如图3所示的计划树,该计划树中包括5个stage,分别为stage1、stage2、stage3、stage4和stage5,统计获得stage1的代价为Coststage1,stage2的代价为Coststage2,stage3的代价为Coststage3,stage4的代价为Coststage4,stage5的代价为Coststage5,其中,stage1和stage2可以并行执行,Coststage1<Coststage2,过滤掉Coststage1,stage3和stage4可以并行执行,Coststage3>Coststage4,过滤掉Coststage4,因此可以统计获得计划树的代价为Coststage2+Coststage3+Coststage5。
步骤104:按照代价最低的计划树查询数据。
本申请实施例中,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,计算出的每个计划树的代价更为准确,可以认为选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
在本申请的一个实施例中,计算计划树中不同操作的代价时,由于计划树中不同的操作涉及的开销不同,可以根据操作涉及的开销,计算该操作的代价。
例如,数据查询系统的节点执行scan操作时,需要扫描该节点上存储的表,因此,scan操作涉及I/O开销,可以根据预设的I/O权重系数,计算每个计划树中scan操作的代价。
一种实现方式中,若数据查询系统包括多个节点,各个节点单独执行scan操作,可以根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。其中,节点数越多,作为scan操作对象的表的行总数越少,则每一节点的执行scan操作的代价越低,也就是,scan操作的代价与节点数成反比,scan操作的代价与作为scan操作对象的表的行总数成正比。
一个例子中,可以根据公式
Cost1=δI/O×|T1|÷Node
确定每个计划树中scan操作的代价。其中,Cost1为scan操作的代价,δI/O为预设的I/O权重系数,|T1|为作为scan操作对象的表的行总数,如图3所示的计划树中的scan A1,表A1作为scan操作对象,Node为数据查询系统的节点数。
数据查询系统的节点执行filter操作时,filter操作需要被转换为弹性分布式数据集(Resilient Distributed Datasets,RDD)的filter算子,该转换过程在各个节点的内存中执行,也就是,涉及了CPU开销,没有网络传输和I/O开销。因此,可以根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价。一种实现方式中,若RDD的分区数等于CPU的核数,当没有选择条件时,CPU耗时为0,计划树的filter操作的代价为0;当有选择条件时,CPU耗时不为0,可以根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
一个例子中,可以根据公式
Cost2=δCPU1×|T2|
确定每个计划树中filter操作的代价。其中,Cost2为filter操作的代价。δCPU1为预设的filter操作的CPU计算权重系数,|T2|为作为filter操作对象的表的行总数。
数据查询系统的节点执行project操作时,project操作需要被转换为RDD的映射(map)算子,该转换过程在各个节点的内存中执行,也就是,涉及了CPU开销,没有网络传输和I/O开销,可以根据预设的project操作的CPU计算权重系数计算每个计划树中project操作的代价。一种实现方式中,若RDD的分区数等于CPU的核数,可以根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
一个例子中,可以根据公式
Cost3=δCPU2×|T3|×S
确定每一计划树中project操作的代价。其中,Cost3为project操作的代价。δCPU2为预设的project操作的CPU计算权重系数,|T3|为作为project操作对象的表的行总数,S为根据查询请求从作为project操作对象的表中选择行的概率,即S为查询请求对应的选择率。
在本申请的一个实施例中,为了便于计算查询请求对应的选择率,可以预先存储的各个表的列信息,由这些存储的列信息构成数据字典,这里,数据字典中可以包括表名、表中的行总数等,列信息可以包括每一列去重后的行总数。此时,对于预先存储的各个表的每一列的列信息,数值是均匀分布的,每一数值的选择率为1/(该数值所在列去重后的行总数)。在一种实现方式中,若表中的列为数据列,该列的列信息还可以包括:该列中最大值和最小值。此时,选择率的计算方法如表1所示。
表1
其中,value为一个条件表达式的数值,lower为条件表达式的下界,upper为条件表达式的上界,COUNTdiff为查询的列去重后的行总数,Min为查询的列中的最小值,Max为查询的列中的最大值。
实际应用中,一个查询请求中可以拆分为多个如表1中所示的条件表达式,根据表1所示的公式和预先存储的各个表的列信息,确定根据每一条件表达式从作为project操作对象的表中选择行的概率,即确定条件表达式对应的选择率;之后,根据条件表达式间的运算符,确定根据查询请求从作为project操作对象的表中选择行的概率,即确定查询请求对应的选择率。
一种实现方式中,当查询请求中可以拆分为多个条件表达式时,若条件表达式间的运算符为and,则确定查询请求对应的选择率为:and两侧的条件表达式对应的选择率的乘积;若条件表达式间的运算符为or,则确定查询请求对应的选择率为:or两侧的条件表达式对应的选择率的和减去or两侧的条件表达式对应的选择率的乘积。如表2所示的包括多个条件表达式的查询请求对应的选择率的计算公式。
表2
条件表达式关系 | 选择率计算公式 |
C<sub>1</sub>and C<sub>2</sub> | S<sub>1</sub>×S<sub>2</sub> |
C<sub>1</sub>or C<sub>2</sub> | S<sub>1</sub>+S<sub>2</sub>-S<sub>1</sub>×S<sub>2</sub> |
其中,C1和C2为一个查询请求包括的两个条件表达式,S1为C1对应的选择率,S2为C2对应的选择率。
数据查询系统的节点执行broatcast join操作时,将broatcast join操作的join关系中左表发送到各个节点上,与broatcast join操作的join关系中右表进行连接,避免出现洗牌(shuffle)。在将broatcast join操作的join关系中左表发送到各个节点上时涉及了网络传输开销,将broatcast join操作的join关系中左表与右表进行连接的操作是在内存中执行,涉及了CPU开销。因此,可以根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价。
一种实现方式中,若broatcast join操作的join关系中右表均匀分布在各个节点上,可以根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。一个例子中,可以根据公式
Cost4=δnetwork×|L1|×Node+δCPU3×|R1|÷Node
确定每个计划树中broatcast join操作的代价。其中,Cost4为broatcast join操作的代价。δnetwork为预设的网络传输权重系数,|L1|为broatcast join操作的join关系中左表查询结果的行总数,Node为数据查询系统的节点数,δCPU3为预设的broatcast join操作的CPU计算权重系数,也就是,预设的broatcast join操作中进行连接的CPU计算权重系数,|R1|为broatcast join操作的join关系中右表查询结果的行总数。
数据查询系统的节点执行shuffle hash join操作时,需要将shuffle hash join操作的join关系中的左表和右表按照关键字(Key)值重分区,这个过程涉及到shuffle,即通过建立的map task,读取各个节点上存储的shuffle hash join操作的join关系中左表和右表,并将shuffle hash join操作的join关系中左表和右表发送到各个节点上,各个节点存储接收的左表和右表。在shuffle之后,对重分区后的数据进行hash join,即各个节点对左表和右表进行连接。其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。另外,对左表和右表进行连接的操作是在内存中执行的,这涉及了CPU开销。
基于上述情况下,可以根据预设的网络传输权重系数、I/O权重系数和shufflehash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价。
一种实现方式中,可以先根据预设的网络传输权重系数、I/O权重系数、shufflehash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;以及根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价。
上述shuffle hash join操作的左代价为shuffle hash join操作中对左表进行shuffle的代价,shuffle hash join操作的右代价为shuffle hash join操作中对右表进行shuffle的代价。
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
一个例子中,可以根据公式
Cost5=CostL1+CostR1+δCPU4×(|L2|+|R2|)
CostL1=2×δI/O×|L2|÷NL1+δnetwork×|L2|
CostR1=2×δI/O×|R2|÷NR1+δnetwork×|R2|
确定每个计划树中shuffle hash join操作的代价。其中,Cost5为shuffle hashjoin操作的代价,CostL1为shuffle hash join操作的左代价,CostR1为shuffle hash join操作的右代价。δCPU4为预设的shuffle hash join操作的CPU计算权重系数,也就是,预设的shuffle hash join操作中进行连接的CPU计算权重系数,|L2|为shuffle hash join操作的join关系中左表查询结果的行总数,|R2|为shuffle hash join操作的join关系中右表查询结果的行总数,NL1为shuffle hash join操作的join关系中左表的map task的个数,NR1为shuffle hash join操作的join关系中右表的map task的个数。
数据查询系统的节点执行sort merge join操作时,需要将sort merge join操作的join关系中的左表和右表按照Key值重分区,这个过程涉及到shuffle,即通过建立的maptask,读取各个节点上存储的sort merge join操作的join关系中左表和右表,并将sortmerge join操作的join关系中左表和右表发送到各个节点上,各个节点存储接收的左表和右表。在shuffle之后,对重分区后的数据进行排序,即对左表进行排序,并对右表进行排序。排序之后遍历两个表,碰到相同的key值就合并输出,若左表中的记录小则继续读取左表中的记录,反之读取右表。
其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。在shuffle之后,对左表和右表进行排序的操作是在内存中执行的,这涉及了CPU开销。在排序之后,需要读取左表或右边的,这涉及了I/O开销。
基于上述情况下,可以根据预设的网络传输权重系数、I/O权重系数和sort mergejoin操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价。
一种实现方式中,可以先根据预设的网络传输权重系数、I/O权重系数、sortmerge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;以及根据预设的网络传输权重系数、I/O权重系数、sortmerge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价。
上述sort merge join操作的左代价为sort merge join操作中对左表进行shuffle和排序的代价,sort merge join操作的右代价为sort merge join操作中对右表进行shuffle和排序的代价。
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
一个例子中,可以根据公式
Cost6=CostL2+CostR2+δI/O×(|L3|+|R3|)
CostL2=2×δI/O×|L3|÷NL2+δnetwork×|L3|+δCPU5×|L3|
CostR2=2×δI/O×|R3|÷NR2+δnetwork×|R3|+δCPU5×|R3|
确定每个计划树中sort merge join操作的代价;其中,Cost6为sort merge join操作的代价,CostL2为sort merge join操作的左代价,CostR2为sort merge join操作的右代价。|L3|为sort merge join操作的join关系中左表查询结果的行总数,|R3|为sortmerge join操作的join关系中右表查询结果的行总数,NL2为sort merge join操作的join关系中左表的map task的个数,δCPU5为预设的sort merge join操作的CPU计算权重系数,也就是,预设的shuffle hash join操作中进行排序的CPU计算权重系数,NR2为sort mergejoin操作的join关系中右表的map task的个数。
数据查询系统的节点执行group by操作时会导致shuffle,即通过建立的maptask,读取各个节点上存储的作为group by操作对象的表,并将作为group by操作对象的表发送到各个节点上,各个节点存储接收的表,并对接收的表进行排序。在shuffle之后,各个节点对接收的作为group by操作对象的表进行排序。在排序后,reduce阶段通过聚合函数将排序后的结果进行聚合。
其中,进行shuffle时,需要读取和存储左表和右表,这涉及了I/O开销。进行shuffle时,还需要将左表和右表在节点间传输,这就涉及了网络传输开销。在shuffle之后,对左表和右表进行排序的操作和对排序后的结果进行聚合的操作是在内存中执行的,这涉及了CPU开销。
基于上述情况,可以根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
一种实现方式中,可以根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为groupby操作对象的表的map task的个数,计算计算每个计划树中group by操作中shuffle代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
一个例子中,可以根据公式
Cost7=Cost8+δCPU6×|T4|÷m
Cost8=2×δI/O×|T4|÷n+δnetwork×|T4|+δCPU7×|T4|
确定每个计划树中group by操作的代价;其中,Cost7为group by操作的代价,Cost8为group by操作中进行shuffle排序的代价。δCPU6为预设的sort merge join操作中进行聚合的CPU计算权重系数,|T4|为作为group by操作对象的表的行总数,m为reducer的个数,n为作为group by操作对象的表的map任务的个数,δCPU7为预设的sort merge join操作中进行排序的CPU计算权重系数。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
与数据查询方法实施例对应,本申请实施例还提供了一种数据查询装置。参考图4,图4为本申请实施例提供的数据查询装置的一种结构示意图,该装置包括:
获取单元401,用于获取查询请求;
建立单元402,用于根据查询请求建立至少一个计划树;
第一确定单元403,用于根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
查询单元404,用于按照代价最低的计划树查询数据。
在本申请的一个实施例中,第一确定单元403,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价。
在本申请的一个实施例中,计划树中可以包括scan操作、filter操作、project操作、broatcast join操作、shuffle hash join操作、sort merge join操作和group by操作中的一种或多种;
计算子单元,具体可以用于:
若计划树中包括scan操作,根据预设的I/O权重系数,计算每个计划树中scan操作的代价;
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数计算每个计划树中project操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数和sort merge join操作的CPU计算权重系数,计算每个计划树中sort merge join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价。
在本申请的一个实施例中,上述数据查询装置还可以包括:第二确定单元,用于确定根据查询请求从作为project操作对象的表中选择行的概率;
第二确定单元,可以包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据查询请求从作为project操作对象的表中选择行的概率。
在本申请的一个实施例中,若表中的列为数据列,列信息还可以包括:最大值和最小值。
在本申请的一个实施例中,第三确定子单元,具体可以用于:
若查询请求中条件表达式间的运算符为and,则确定根据查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若查询请求中条件表达式间的运算符为or,则确定根据查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去条件表达式选择行的概率乘积。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcast join操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcastjoin操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的map task的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort mergejoin操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort mergejoin操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;
根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sortmerge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort mergejoin操作的代价。
在本申请的一个实施例中,计算子单元,具体可以用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及reducer的个数,计算得到每个计划树中group by操作的代价。
在本申请的一个实施例中,第一确定子单元,具体可以用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
与数据查询方法实施例对应,本申请实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504;其中,处理器501、通信接口502、存储器503通过通信总线504完成相互间的通信;
存储器503,用于存放计算机程序;
处理器501,用于执行存储器503上所存放的计算机程序时,实现数据查询方法。其中,数据查询方法包括:
获取查询请求;
根据查询请求建立至少一个计划树;
根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
通信总线504可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。该通信总线504可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口502用于上述电子设备与其他设备之间的通信。
存储器503可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器503还可以是至少一个位于远离前述处理器的存储装置。
处理器501可以是通用处理器,包括CPU、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
与数据查询方法实施例对应,本申请实施例还提供了一种机器可读存储介质,机器可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现数据查询方法。其中,数据查询方法包括:
获取查询请求;
根据查询请求建立至少一个计划树;
根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据。
应用本申请实施例,根据网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价,考虑了数据查询时的网络传输代价、I/O代价和CPU计算代价,而网络传输、I/O和CPU计算为数据查询时的主要开销,因此,本申请实施例能够准确的确定出每个计划树的代价,选择出代价最低的计划树即为最优的代价树,通过最优的计划树查询数据,有效地提高了数据查询效率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据查询装置、电子设备、机器可读存介质实施例而言,由于其基本相似于数据查询方法实施例,所以描述的比较简单,相关之处参见数据查询方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (22)
1.一种数据查询方法,其特征在于,所述方法包括:
获取查询请求;
根据所述查询请求建立至少一个计划树;
根据预设的网络传输权重系数、输入I/输出O权重系数和中央处理器CPU计算权重系数,确定每个计划树的代价;
按照代价最低的计划树查询数据;
所述根据预设的网络传输权重系数、I/O权重系数和CPU计算权重系数,确定每个计划树的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
根据得到的每个计划树中每一操作的代价,确定每个计划树的代价;
所述计划树中包括扫描scan操作、投影project操作和排序合并连接sort merge join操作中的一种或多种;
所述根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价的步骤,包括:
若计划树中包括scan操作,根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort merge join操作的代价。
2.根据权利要求1所述的方法,其特征在于,所述计划树中还包括过滤filter操作、广播连接broatcast join操作、洗牌哈希连接shuffle hash join操作和分组group by操作中的一种或多种;
所述根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价的步骤,包括:
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcastjoin操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和groupby操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
3.根据权利要求2所述的方法,其特征在于,所述根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价的步骤,包括:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
4.根据权利要求1所述的方法,其特征在于,通过以下方式确定根据所述查询请求从作为project操作对象的表中选择行的概率:
根据预先存储的各个表的列信息,确定根据所述查询请求中每一个条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
5.根据权利要求1所述的方法,其特征在于,若表中的列为数据列,所述列信息还包括:最大值和最小值。
6.根据权利要求1或5所述的方法,其特征在于,所述根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率的步骤,包括:
若所述查询请求中条件表达式间的运算符为且and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择根据的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
7.根据权利要求2所述的方法,其特征在于,所述根据预设的网络传输权重系数和broatcast join操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价的步骤,包括:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcastjoin操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcast join操作的代价。
8.根据权利要求2所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hashjoin操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务maptask的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
9.根据权利要求2所述的方法,其特征在于,所述根据预设的网络传输权重系数、I/O权重系数和group by操作的CPU计算权重系数,计算每个计划树中group by操作的代价的步骤,包括:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器reducer的个数,计算得到每个计划树中group by操作的代价。
10.根据权利要求1所述的方法,其特征在于,所述根据得到的每个计划树中每一操作的代价,确定每个计划树的代价的步骤,包括:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
11.一种数据查询装置,其特征在于,所述装置包括:
获取单元,用于获取查询请求;
建立单元,用于根据所述查询请求建立至少一个计划树;
第一确定单元,用于根据预设的网络传输权重系数、输入I/输出O权重系数和中央处理器CPU计算权重系数,确定每个计划树的代价;
查询单元,用于按照代价最低的计划树查询数据;
所述第一确定单元,包括:
计算子单元,用于根据预设的网络传输权重系数、I/O权重系数和操作的CPU计算权重系数,计算每个计划树中每一操作的代价;
第一确定子单元,用于根据得到的每个计划树中每一操作的代价,确定每个计划树的代价;
所述计划树中包括扫描scan操作、投影project操作和排序合并连接sort merge join操作中的一种或多种;
所述计算子单元,具体用于:
若计划树中包括scan操作,根据预设的I/O权重系数、作为scan操作对象的表的行总数、以及数据查询系统的节点数,计算每个计划树中scan操作的代价;
若计划树中包括project操作,根据预设的project操作的CPU计算权重系数、作为project操作对象的表的行总数、以及根据所述查询请求从作为project操作对象的表中选择行的概率,计算每个计划树中project操作的代价;
若计划树中包括sort merge join操作,根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中左表的map task的个数,计算每个计划树中sort merge join操作的左代价;根据预设的网络传输权重系数、I/O权重系数、sort merge join操作的CPU计算权重系数、sort merge join操作的join关系中右表查询结果的行总数、以及sort merge join操作的join关系中右表的map task的个数,计算每个计划树中sort merge join操作的右代价;根据计算得到的每个计划树中sort merge join操作的左代价和右代价、预设的I/O权重系数、sort merge join操作的join关系中左表查询结果的行总数、以及sort merge join操作的join关系中右表查询结果的行总数,计算每个计划树中sort merge join操作的代价。
12.根据权利要求11所述的装置,其特征在于,所述计划树中还包括过滤filter操作、广播连接broatcast join操作、洗牌哈希连接shuffle hash join操作和分组group by操作中的一种或多种;
所述计算子单元,具体用于:
若计划树中包括filter操作,根据预设的filter操作的CPU计算权重系数,计算每个计划树中filter操作的代价;
若计划树中包括broatcast join操作,根据预设的网络传输权重系数和broatcastjoin操作的CPU计算权重系数,计算每个计划树中broatcast join操作的代价;
若计划树中包括shuffle hash join操作,根据预设的网络传输权重系数、I/O权重系数和shuffle hash join操作的CPU计算权重系数,计算每个计划树中shuffle hash join操作的代价;
若计划树中包括group by操作,根据预设的网络传输权重系数、I/O权重系数和groupby操作的CPU计算权重系数,计算每个计划树中group by操作的代价。
13.根据权利要求12所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的filter操作的CPU计算权重系数、以及作为filter操作对象的表的行总数,计算每个计划树中filter操作的代价。
14.根据权利要求11所述的装置,其特征在于,所述装置还包括:第二确定单元,用于确定根据所述查询请求从作为project操作对象的表中选择行的概率;
所述第二确定单元,包括:
第二确定子单元,用于根据预先存储的各个表的列信息,确定根据所述查询请求中每一条件表达式从作为project操作对象的表中选择行的概率;所述列信息包括每一列去重后的行总数;
第三确定子单元,用于根据所述查询请求中条件表达式间的运算符,确定根据所述查询请求从作为project操作对象的表中选择行的概率。
15.根据权利要求14所述的装置,其特征在于,若表中的列为数据列,所述列信息还包括:最大值和最小值。
16.根据权利要求14或15所述的装置,其特征在于,所述第三确定子单元,具体用于:
若所述查询请求中条件表达式间的运算符为且and,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据and两侧的条件表达式选择行的概率的乘积;
若所述查询请求中条件表达式间的运算符为或or,则确定根据所述查询请求从作为project操作对象的表中选择行的概率为:根据or两侧的条件表达式选择行的概率的和减去根据or两侧的条件表达式选择行的概率乘积。
17.根据权利要求12所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、broatcast join操作的CPU计算权重系数、broatcastjoin操作的join关系中左表查询结果的行总数、broatcast join操作的join关系中右表查询结果的行总数、以及数据查询系统的节点数,计算每个计划树中broatcast join操作的代价。
18.根据权利要求12所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中左表的映射任务maptask的个数,计算每个计划树中shuffle hash join操作的左代价;
根据预设的网络传输权重系数、I/O权重系数、shuffle hash join操作的join关系中右表查询结果的行总数、以及shuffle hash join操作的join关系中右表的map task的个数,计算每个计划树中shuffle hash join操作的右代价;
根据计算得到的每个计划树中shuffle hash join操作的左代价和右代价、预设的shuffle hash join操作的CPU计算权重系数、shuffle hash join操作的join关系中左表查询结果的行总数、以及shuffle hash join操作的join关系中右表查询结果的行总数,计算每个计划树中shuffle hash join操作的代价。
19.根据权利要求12所述的装置,其特征在于,所述计算子单元,具体用于:
根据预设的网络传输权重系数、I/O权重系数、group by操作中进行排序的CPU计算权重系数、作为group by操作对象的表的行总数、以及作为group by操作对象的表的maptask的个数,计算每个计划树中group by操作中进行shuffle和排序的代价;
根据计算得到的每个计划树中group by操作中进行shuffle和排序的代价、预设的group by操作中进行聚合的CPU计算权重系数、作为group by操作对象的表的行总数、以及合并器reducer的个数,计算得到每个计划树中group by操作的代价。
20.根据权利要求11所述的装置,其特征在于,所述第一确定子单元,具体用于:
对于每一计划树,若该计划树包括多个阶段,计算每一阶段包括操作的代价的和,获得该计划树每一阶段的代价;
过滤掉每个计划树中可并行执行的阶段的代价中非最大的代价;
对于每个计划树,统计剩余阶段的代价的和,获得该计划树的代价。
21.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序,实现权利要求1-10任一所述的方法步骤。
22.一种机器可读存储介质,其特征在于,所述机器可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-10任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711295212.7A CN110019341B (zh) | 2017-12-08 | 2017-12-08 | 一种数据查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711295212.7A CN110019341B (zh) | 2017-12-08 | 2017-12-08 | 一种数据查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019341A CN110019341A (zh) | 2019-07-16 |
CN110019341B true CN110019341B (zh) | 2021-07-23 |
Family
ID=67186631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711295212.7A Active CN110019341B (zh) | 2017-12-08 | 2017-12-08 | 一种数据查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019341B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110597808B (zh) * | 2019-08-20 | 2021-05-18 | 蚂蚁金服(杭州)网络技术有限公司 | 分布式数据库表连接方法、装置、系统、服务器及介质 |
CN112764935B (zh) * | 2021-01-29 | 2023-06-30 | 中国平安人寿保险股份有限公司 | 大数据处理方法、装置、电子设备及存储介质 |
CN114461677B (zh) * | 2022-04-12 | 2022-07-26 | 天津南大通用数据技术股份有限公司 | 一种基于选择度传递调整连接顺序的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408900A (zh) * | 2008-11-24 | 2009-04-15 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
WO2009061814A2 (en) * | 2007-11-05 | 2009-05-14 | University Of Florida Research Foundation, Inc. | Lossless data compression and real-time decompression |
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7689538B2 (en) * | 2006-01-26 | 2010-03-30 | International Business Machines Corporation | Autonomic recommendation and placement of materialized query tables for load distribution |
US10353897B2 (en) * | 2015-06-29 | 2019-07-16 | Oracle International Corporation | One-pass join size estimation with correlated sampling |
-
2017
- 2017-12-08 CN CN201711295212.7A patent/CN110019341B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009061814A2 (en) * | 2007-11-05 | 2009-05-14 | University Of Florida Research Foundation, Inc. | Lossless data compression and real-time decompression |
CN101408900A (zh) * | 2008-11-24 | 2009-04-15 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
Non-Patent Citations (5)
Title |
---|
Cost-based query optimization for XPath;Li D, Chen W, Liang X, et al.;《Applied Mathematics & Information Sciences》;20141231;全文 * |
Sort vs. hash revisited: Fast join implementation on modern multi-core CPUs;Kim C, Kaldewey T, Lee V W, et al.;《Proceedings of the VLDB Endowment》;20091231;全文 * |
一种改进的闪存数据库 Sort-Merge-Join 算法;邢玉钢;《计算机应用研究》;20120229;第29卷(第2期);全文 * |
刘春雷.基于代价模型的Spark_SQL查询优化研究.《中国优秀硕士学位论文全文数据库信息科技辑》.2017,第19-39页. * |
基于代价模型的Spark_SQL查询优化研究;刘春雷;《中国优秀硕士学位论文全文数据库信息科技辑》;20170215;19-39 * |
Also Published As
Publication number | Publication date |
---|---|
CN110019341A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108268586B (zh) | 跨多数据表的数据处理方法、装置、介质和计算设备 | |
CN110019341B (zh) | 一种数据查询方法及装置 | |
CN101021874A (zh) | 一种对查询sql请求进行优化的方法及装置 | |
EP3217296A1 (en) | Data query method and apparatus | |
CN109791543B (zh) | 执行多表连接操作的控制方法及对应装置 | |
CN111400288A (zh) | 数据质量检查方法及系统 | |
US20150120697A1 (en) | System and method for analysis of a database proxy | |
CN111723161A (zh) | 一种数据处理方法、装置及设备 | |
CN113918605A (zh) | 数据查询方法、装置、设备以及计算机存储介质 | |
CN109471874A (zh) | 数据分析方法、设备及存储介质 | |
CN109117426B (zh) | 分布式数据库查询方法、装置、设备及存储介质 | |
CN111125199A (zh) | 一种数据库访问方法、装置及电子设备 | |
CN107735781A (zh) | 存储查询结果的方法和装置、计算设备 | |
CN113792084A (zh) | 数据热度的分析方法、装置、设备及存储介质 | |
CN107844490B (zh) | 一种数据库的分库方法及装置 | |
US11531706B2 (en) | Graph search using index vertices | |
CN113761185A (zh) | 主键提取方法、设备及存储介质 | |
CN111078671A (zh) | 数据表字段的修改方法、装置、设备和介质 | |
WO2023081153A1 (en) | Columnar cache query using hybrid query execution plan | |
CN113779029A (zh) | 一种数据查询的方法及装置 | |
US11386155B2 (en) | Filter evaluation in a database system | |
CN113868510A (zh) | 一种数据处理方法、设备及计算机可读存储介质 | |
CN113535781A (zh) | 一种时序库的数据查询方法、装置、设备及存储介质 | |
WO2021072776A1 (zh) | 数据合并方法、装置、电子设备及存储介质 | |
CN107766380B (zh) | 一种业务数据的均衡分布及搜索方法及其装置、系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |