CN107870857A - 一种针对查询计划生成器进行测试的方法及装置 - Google Patents
一种针对查询计划生成器进行测试的方法及装置 Download PDFInfo
- Publication number
- CN107870857A CN107870857A CN201610862755.1A CN201610862755A CN107870857A CN 107870857 A CN107870857 A CN 107870857A CN 201610862755 A CN201610862755 A CN 201610862755A CN 107870857 A CN107870857 A CN 107870857A
- Authority
- CN
- China
- Prior art keywords
- inquiry plan
- plan
- inquiry
- compared
- benchmark
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种针对查询计划生成器进行测试的方法及装置,所述方法包括:生成待比较的查询计划;其中,所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;比较所述待比较的查询计划与所述基准查询计划,获得测试结果。本申请可以提高测试的准确性和灵活性。
Description
技术领域
本申请涉及终端设备技术领域,尤其涉及一种针对查询计划生成器进行测试的方法及装置。
背景技术
结构化查询语言(英文全称为Structured Query Language,英文缩写为SQL)是一种数据库查询和程序设计语言,广泛应用于数据库系统。SQL查询计划生成器是SQL系统的重要组成部分,通常包括编译器(英文为Compiler)和优化器(英文为Optimizer)两个部分。一般地,查询计划生成器可以将SQL语言通过Compiler生成逻辑查询计划,再通过Optimizer转换成物理查询计划,所述物理查询计划能被执行引擎(runtime)识别,最终在runtime上执行,最终得到执行结果。对于任何SQL系统而言,查询计划生成器的重要性都是不言而喻的。因此,当生成新版本的查询计划生成器时,如何对其进行测试以保证整个系统的正确性成为一个重要的问题。
现有技术中,存在一种针对查询计划生成器进行测试的方法。在这种方法中,使用文本表示查询计划生成器生成的物理查询计划,通过文本比较的方式比较两个不同版本的物理查询计划,若两个不同版本的物理查询计划的文本完全一致,则比对通过;若不一致,则比对不通过。在这种方式中,仅仅是任务task命名的变化都会导致比对不通过,这种方式存在灵活性不强、准确性不高的缺点。
发明内容
本申请的目的是,提供一种针对查询计划生成器进行测试的方法及装置,可以提高测试的准确性和灵活性。
本申请提供了一种针对查询计划生成器进行测试的方法,所述方法包括:生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
可选地,所述基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果包括:基于所述DAG判断所述待比较的查询计划与所述基准查询计划是否一致;若一致,确定测试通过。
可选地,所述方法还包括:根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。
可选地,所述生成待比较的查询计划包括:根据预先保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
可选地,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
可选地,所述基于所述DAG比较所述待比较的查询计划与所述基准查询计划包括:比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
可选地,所述比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致包括:根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,比较所述DAG中算子节点的属性是否一致。
可选地,所述比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致包括:比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。
本申请还提供了一种针对查询计划生成器进行测试的装置,所述装置包括:第一生成单元,用于生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;第一获取单元,用于获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;比较单元,用于基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
可选地,所述比较单元具体用于:基于所述DAG判断所述待比较的查询计划与所述基准查询计划是否一致;若一致,确定测试通过。
可选地,所述装置还包括:第二生成单元,用于根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;保存单元,用于保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。
可选地,所述第一生成单元具体用于:根据所述保存单元保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
可选地,所述第一生成单元生成的查询计划由DAG表示,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
可选地,所述比较单元包括:第一比较单元,用于比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,第二比较单元,用于比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
可选地,所述第一比较单元具体用于:根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,比较所述DAG中算子节点的属性是否一致。
可选地,所述第二比较单元具体用于:比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。
本申请还公开了一种用于针对查询计划生成器进行测试的装置,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:生成待比较的查询计划;其中,所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
本申请实施例提供的针对查询计划生成器进行测试的方法及装置,由于待比较的查询计划以及基准查询计划均为结构化的查询计划,并基于结构化的查询计划比较所述待比较的查询计划以及基准查询计划,相对于文本比较的方式,更加准确、灵活,提高了测试的准确性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例可以应用的一个示意性应用场景;
图2为本申请一实施例提供的一种针对查询计划生成器进行测试的方法流程图;
图3为本申请实施例提供的持久化示意图;
图4为本申请实施例提供的一种DAG结构示意图;
图5为本申请实施例提供的又一种DAG结构示意图;
图6为本申请又一实施例提供的针对查询计划生成器进行测试的方法流程图;
图7为本申请实施例提供的一种针对查询计划生成器进行测试的装置示意图;
图8为本申请实施例提供的另一种用于针对查询计划生成器进行测试的装置示意图。
具体实施方式
本申请的目的是,提供一种针对查询计划生成器进行测试的方法及装置,可以提高测试的准确性和灵活性。
在本文中,需要理解的是,所涉及的术语“查询计划生成器”一般用于输入SQL语句,生成逻辑查询计划,最终输出优化过的物理查询计划。当然,有些查询计划生成器输入SQL语句,仅生成物理查询计划。
其中,所涉及的技术术语“逻辑查询计划”一般用于表示基于关系代数的逻辑算子树。
其中,所涉及的技术术语“物理查询计划”一般用于表示确定了算子算法,并最终能在runtime生执行的物理算子树。
其中,所涉及的技术术语“DAG”一般用于表示有向无环图(英文全称为DirectedAcyclic Graph)。
当然,上述术语的解释仅为方便理解而做出,而不具有任何限制含义。
为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先参考图1,本申请实施方式可以应用的场景例如可以为如图1所示的场景。其中,如图1所示,SQL语句输入至查询计划生成器的编译器(英文为Compiler)后,生成逻辑查询计划;所述逻辑查询计划经过优化器(英文为Optimizer)优化后,生成物理查询计划。需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
下面结合图1的应用场景,参考图2至图5来描述根据本申请示例性实施方式的针对查询计划生成器进行测试的方法。需要说明的是,下面将以SQL为例进行说明,查询语句具体为SQL语句,查询计划生成器具体为SQL查询计划生成器。
如图2所示,为根据本申请一实施方式的针对查询计划生成器进行测试的方法的流程图,具体例如可以包括:
S201,生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构。
具体实现时,本申请实施例提供的测试方法还包括:根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。也就是说,在查询计划生成器每次生成查询计划时,均持久化所述查询计划,以及生成查询计划所依赖的查询任务以及与所述查询任务所对应的上下文信息,便于下次新版本的查询计划生成器测试使用。其中,持久化是指将内存中的数据保存到可永久保存的数据库、文件系统或磁盘的过程。
如图3所示为本申请实施例提供的持久化示意图。具体实现时,将SQL语句以及元数据信息输入SQL查询计划生成器,经过编译器(英文为Compiler)后,生成逻辑查询计划。这时,将逻辑查询计划以及与SQL语句对应的上下文信息(Context)持久化到分布式文件系统中。所述逻辑查询计划经过优化器(英文为Optimizer)优化后,生成物理查询计划,再将物理查询计划持久化到分布式文件系统中。这样,分布式文件系统即保存了SQL语句(也就是SQL查询任务)、与所述SQL查询任务对应的上下文信息(Context)、基准查询计划。在合适的时间下,还可以将所述分布式文件系统保存的持久化信息同步到元数据仓库中。其中,所述基准查询计划可以包括逻辑查询计划和/或物理查询计划。一般地,所述基准查询计划至少要包含物理查询计划。可选地,所述基准查询计划还可以包括逻辑查询计划。这是因为,若将SQL查询计划生成器作为一个整体,其输入是SQL语句(也就是SQL查询任务),输出为物理查询计划。若只保存物理查询计划作为基准查询计划,与新版本查询计划生成器生成的待比较查询计划进行比较,也能够测试所述新版本查询计划生成器的准确性。当然,为了进一步定位错误发生的位置,也可以既比较逻辑查询计划,也比较物理查询计划。
需要说明的是,对于一条SQL语句而言,其执行时依赖的信息可以包括:
(1)SQL任务信息:包括SQL语句本身以及相应的设置信息。所述设置信息例如可以包括是否打开特定优化器等。
(2)元数据(meta):例如可以包括表元数据(Table meta)、用户定义函数元数据(UDF meta)、资源元数据resource meta,resource(用户代码)等。如果元数据发生变化,相同的SQL语句也会输出不同的物理查询计划。在本申请中,将上述元数据信息统称为查询计划生成器的上下文信息(Context)。
为了保证查询计划生成器的输入一致,不会因为SQL上下文信息的变化导致比对不通过,本申请将查询任务以及与查询任务对应的上下文信息均保存下来,以保证测试的准确性。
具体实现时,在对新版本的查询计划生成器测试时,可以从元数据仓库中获取预先保存的所述查询任务、与所述查询任务对应的上下文信息,生成待比较的查询计划。
需要说明的是,所述待比较的查询计划以及预先保存的基准查询计划均是结构化的查询计划,所述结构化的查询结构由向无环图DAG表示所述查询计划的数据结构。具体实现时,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
举例说明,对于一条SQL语句:“select id from dual”,若使用文本表示所述SQL语句对应的物理查询计划,将如下表1所示:
表1
如表1所示,使用文本表示了所述物理查询计划。若在新版本的查询计划生成器中,任务Task的命名由M1_Stg1变成了M1,如果使用文本比对的方式,所述命名的标号将导致两个物理查询计划比对不通过,而上述命名并不影响物理查询计划的结构和性能。基于此,本申请提出了一种基于结构化的查询计划的测试方法。
如图4所示,为本申请实施例提供的一种DAG结构示意图,当然图4仅为示意,并不视为对本申请的限制。如图4所示,仍然对应同样的SQL语句:“select id from dual”,使用DAG表示所述SQL语句的物理查询计划如图4所示。其中,所述DAG表示了所述物理查询计划的层级关系以及各节点之间的依赖关系。如图所示,所述DAG表示的所述物理查询计划包括3个层级:作业Job、任务Task、算子Operator,箭头表示各层级的各节点间的依赖关系。如图4所示,所述物理查询计划包括一个作业Job节点(job0),包括一个任务Task节点(M1),3个算子Operator节点TableScan OP0_dual、SelectOP1以及FilesinkOP2。其中,根作业RootJob节点为job0,总共包含一个Job节点,Job节点中根任务节点的个数为1,Job节点包含的任务Task节点的总数为1、任务节点Task包含的根算子节点的个数为1、各任务节点包含的算子节点的总数为3。
又举例说明,如图5所示,为本申请实施例提供的又一种DAG结构示意图。对于SQL语句:“select t1.*from dual t1 join dual t2 on t1.id=t2.id”,其物理查询计划使用DAG表示则如图5所示。其中,物理查询计划中包含的作业节点会组成一个DAG,同一个Job的Task又是一个DAG,同一个Task的operator也是一个DAG。
S202,获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构。
如前所述,预先保存了基准查询计划,这时获取基准查询计划即可,所述基准查询计划的结构化表示与待比较查询计划的结构化表示相同,具体可以参见图4和图5所示的DAG结构。
S203,基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
具体地,所述基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果包括:基于所述DAG判断所述待比较的查询计划与所述基准查询计划是否一致;若一致,确定测试通过。若不一致,则确定测试不通过。
具体实现时,所述比较所述待比较的查询计划与所述基准查询计划包括:比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
在一些实施方式中,所述比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致包括:根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,比较所述DAG中算子节点的属性是否一致。
以图5为例进行说明。举例说明,在比较时,可以比较待比较的查询计划与所述基准查询计划的数据结构是否一致。例如,按照DAG表示的层级关系,以Job、Task、Operator这3个层次分别比较。
在Job层次,比较DAG中根作业节点的个数,如图5所示的DAG根作业节点的个数Root Job为1个,即job0,作业job节点的总数为1;job节点包含的根任务节点的个数为2,即M1和M2;job节点包含的任务节点的总数为3,即M1、M2和J3_1_2。
在Task层次,以J3_1_2为例,首先比较算子节点operator的个数是否一致,图5所示的J3_1_2包含5个算子节点;其次要比较root operator个数是否一致(都是2个op5、op6);然后要比较各个operator的属性,例如要要比较Op7的join类型是否都是innerjoin。
在一些实施方式中,所述比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致包括:比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。举例说明,TableScan算子的分区列表可以衡量整个系统的性能,若扫描的分区列表较优化,则说明系统的性能较优。因此,比较各个TS(TableScan)算子扫描的Partition List是非常重要的。此外,还可以比较FS(Filesink)算子中的ColumnReference由TS中哪些列生成等。
当然,以上仅为示例性说明,不视为对本申请的限制。
下面结合图6,对本申请一个具体的实例进行说明,当然以下实例仅为方便理解而示出,并不视为对本申请的限制。
参见图6,为本申请又一实施例提供的针对查询计划生成器进行测试的方法流程图,所述方法可以包括:
S601,预先根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划。
S602,保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。
需要说明的是,在实际应用中,为了优化SQL系统的性能,常常需要对SQL系统进行升级、更新,由此会生成不同版本的查询计划生成器。为了保证每一次生成的查询计划生成器的正确性,需要对查询计划生成器进行测试,由此确保整个SQL系统的正确性和安全性。举例说明,假设查询计划生成器存在1.0版本、2.0版本和3.0版本,其中,1.0版本为最旧的版本,2.0版本为中间版本,3.0版本为新版本。其中,1.0版本的查询计划是经过实际测试、使用验证为正确无误的版本,因此可以作为下一版本测试的基准查询计划。同样地,2.0版本的查询计划经过测试验证为正确后,即可以作为3.0版本的基准查询计划,以此类推,每一版本经过测试后的查询计划均可以作为下一版本的基准查询计划。当然,需要说明的是,软件开发的过程是非常复杂的,经常会需要各个不同团队的合作,因此,保存每一版本的查询计划、查询任务以及上下文信息是非常重要的,可以为其他团队进行测试提供基准查询计划,由此保证了系统的正确性和安全性。
在本申请具体实现时,当每个版本的查询计划生成器生成查询计划时,均保存生成的查询计划以及生成查询计划所依赖的查询任务以及与所述查询任务所对应的上下文信息,便于下次新版本的查询计划生成器测试使用。举例说明,假设查询计划生成器存在1.0版本、2.0版本和3.0版本,其中,1.0版本为最旧的版本,2.0版本为中间版本,3.0版本为新版本。针对同一查询任务,输入对应SQL查询语句和上下文信息后即可以获得查询计划。每次生成一个版本时,均针对同一查询任务生成对应的查询计划。前一版本生成的查询计划将作为基准查询计划,以便供后一版本测试使用。举例说明,使用第一查询语句以及1.0版本的查询计划生成器生成的第一查询计划将作为基准查询计划,当对2.0版本进行测试时,使用保存的第一查询语句以及上下文信息、2.0版本的查询计划生成器生成第二查询计划,比较所述基准查询计划和第二查询计划是否一致,获得测试结果。同时,保存生成的第二查询计划作为新的基准查询计划,以及生成第二查询计划所依赖的查询任务以及上下文信息,供测试2.0版本的查询计划生成器时使用。由此,每次测试时均保留了最新生成的查询计划作为下一次测试的基准查询计划。
需要说明的是,基准查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构。具体实现时,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
S603,当需要对新版本的查询计划生成器测试时,根据预先保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
同样地,所述待比较的查询计划也为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构。
S604,获取保存的基准查询计划。
S605,基于所述DAG比较所述待比较的查询计划与所述基准查询计划,判断所述待比较的查询计划与所述基准查询计划是否一致。
S606,若经过比较,所述待比较的查询计划与所述基准查询计划一致,则确定测试通过;若不一致,则确定测试不通过。
以上是对本申请实施例所提供的针对查询计划生成器进行测试的方法进行的详细描述,下面对本申请提供的针对查询计划生成器进行测试的装置进行详细描述。
图7是本申请实施例提供的针对查询计划生成器进行测试的装置示意图,如图7所示,本申请的针对查询计划生成器进行测试的装置包括:第一生成单元701、第一获取单元702和比较单元703,确定单元704。其中:
所述第一生成单元701用于生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构。
所述第一获取单元702用于获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构。
所述比较单元703用于比较所述待比较的查询计划与所述基准查询计划,判断所述待比较的查询计划与所述基准查询计划是否一致。
确定单元704,用于若一致,确定测试通过。
在一些实施方式中,所述装置还包括:
第二生成单元,用于根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;
保存单元,用于保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。
在一些实施方式中,所述第一生成单元具体用于:
根据所述保存单元保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
在一些实施方式中,所述第一生成单元生成的查询计划由DAG表示,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
在一些实施方式中,所述比较单元包括
第一比较单元,用于比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,
第二比较单元,用于比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
在一些实施方式中,所述第一比较单元具体用于:
根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,
比较所述DAG中算子节点的属性是否一致。
在一些实施方式中,所述第二比较单元具体用于:
比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,
比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。
上述各单元的功能可对应于图1~图5详细描述的上述针对查询计划生成器进行测试的方法的处理步骤,于此不再赘述。
参见图8,为本申请实施例提供的另一种针对查询计划生成器进行测试的装置示意图。所述装置800包括:至少一个处理器801(例如CPU),存储器802,接收器803,发送器804和至少一个通信总线805,用于实现这些装置之间的连接通信。处理器801用于执行存储器802中存储的可执行模块,例如计算机程序。存储器802可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器801执行所述一个或者一个以上程序包含用于进行以下操作的指令:
生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:基于所述DAG判断所述待比较的查询计划与所述基准查询计划是否一致;若一致,确定测试通过。
在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:根据预先保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,比较所述DAG中算子节点的属性是否一致。
在一些实施方式中,所述处理器801具体还用于执行所述一个或者一个以上程序包含用于进行以下操作的指令:比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种针对查询计划生成器进行测试的方法,其特征在于,所述方法包括:
生成待比较的查询计划;其中,所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;
获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;
基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
2.根据权利要求1所述的方法,其特征在于,所述基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果包括:
基于所述DAG判断所述待比较的查询计划与所述基准查询计划是否一致;若一致,确定测试通过。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据查询任务、与所述查询任务对应的上下文信息生成基准查询计划;
保存所述基准查询计划、查询任务以及与所述查询任务对应的上下文信息。
4.根据权利要求3所述的方法,其特征在于,所述生成待比较的查询计划包括:
根据预先保存的查询任务、与所述查询任务对应的上下文信息生成待比较的查询计划。
5.根据权利要求1所述的方法,其特征在于,所述DAG用于表示所述查询计划各节点的层级关系以及所述各节点之间的依赖关系。
6.根据权利要求1或5所述的方法,其特征在于,所述基于所述DAG比较所述待比较的查询计划与所述基准查询计划包括:
比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致;和/或,
比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致。
7.根据权利要求6所述的方法,其特征在于,所述比较所述待比较的查询计划与所述基准查询计划的数据结构是否一致包括:
根据所述DAG表示的层级关系,判断所述DAG中根作业节点的个数、作业节点的总数、各作业节点包含的根任务节点的个数、各作业节点包含的任务节点的总数、各任务节点包含的根算子节点的个数、各任务节点包含的算子节点的总数是否一致;和/或,
比较所述DAG中算子节点的属性是否一致。
8.根据权利要求6所述的方法,其特征在于,所述比较所述待比较的查询计划与所述基准查询计划的性能参数是否一致包括:
比较所述待比较的查询计划与所述基准查询计划各扫描表TableScan算子的分区列表是否一致;和/或,
比较所述文件存储Filesink算子中的列引用信息columnreference是否一致。
9.一种针对查询计划生成器进行测试的装置,其特征在于,所述装置包括:
第一生成单元,用于生成待比较的查询计划;所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;
第一获取单元,用于获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;
比较单元,用于基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
10.一种用于针对查询计划生成器进行测试的装置,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
生成待比较的查询计划;其中,所述待比较的查询计划为结构化的查询计划,由有向无环图DAG表示所述查询计划的数据结构;
获取基准查询计划;其中,所述基准查询计划为结构化的查询计划,由DAG表示所述基准查询计划的数据结构;
基于所述DAG比较所述待比较的查询计划与所述基准查询计划,获得测试结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610862755.1A CN107870857A (zh) | 2016-09-28 | 2016-09-28 | 一种针对查询计划生成器进行测试的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610862755.1A CN107870857A (zh) | 2016-09-28 | 2016-09-28 | 一种针对查询计划生成器进行测试的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107870857A true CN107870857A (zh) | 2018-04-03 |
Family
ID=61761353
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610862755.1A Pending CN107870857A (zh) | 2016-09-28 | 2016-09-28 | 一种针对查询计划生成器进行测试的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107870857A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112470128A (zh) * | 2018-07-25 | 2021-03-09 | 微软技术许可有限责任公司 | 数据流执行图的自动调整 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120072413A1 (en) * | 2010-09-22 | 2012-03-22 | Castellanos Maria G | System and method for comparing database query plans |
CN102546247A (zh) * | 2011-12-29 | 2012-07-04 | 华中科技大学 | 一种适用流式处理的大规模数据连续分析系统 |
CN102609451A (zh) * | 2012-01-11 | 2012-07-25 | 华中科技大学 | 面向流式数据处理的sql查询计划生成方法 |
US20160140241A1 (en) * | 2014-11-13 | 2016-05-19 | Christoph Weyerhaeuser | Decoupling filter injection and evalulation by forced pushdown of filter attributes in calculation models |
-
2016
- 2016-09-28 CN CN201610862755.1A patent/CN107870857A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120072413A1 (en) * | 2010-09-22 | 2012-03-22 | Castellanos Maria G | System and method for comparing database query plans |
CN102546247A (zh) * | 2011-12-29 | 2012-07-04 | 华中科技大学 | 一种适用流式处理的大规模数据连续分析系统 |
CN102609451A (zh) * | 2012-01-11 | 2012-07-25 | 华中科技大学 | 面向流式数据处理的sql查询计划生成方法 |
US20160140241A1 (en) * | 2014-11-13 | 2016-05-19 | Christoph Weyerhaeuser | Decoupling filter injection and evalulation by forced pushdown of filter attributes in calculation models |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112470128A (zh) * | 2018-07-25 | 2021-03-09 | 微软技术许可有限责任公司 | 数据流执行图的自动调整 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2019213302B2 (en) | Filtering data lineage diagrams | |
Prowell et al. | Cleanroom software engineering: technology and process | |
Küster et al. | Detecting and resolving process model differences in the absence of a change log | |
US7673282B2 (en) | Enterprise information unification | |
KR101083488B1 (ko) | 객체 모델의 영향 분석 | |
CN110337642A (zh) | 通过使用测试用例来执行测试的方法和装置 | |
US20150310061A1 (en) | Query relationship management | |
WO2005031503A2 (en) | Sytem and method for generating data validation rules | |
Zanoni et al. | Pattern detection for conceptual schema recovery in data‐intensive systems | |
US20220269702A1 (en) | Intelligent annotation of entity-relationship data models | |
Kessentini et al. | Automated metamodel/model co-evolution using a multi-objective optimization approach | |
EP3486798A1 (en) | Reporting and data governance management | |
Abdulla et al. | Precise and sound automatic fence insertion procedure under PSO | |
Ben-Gan et al. | Inside Microsoft SQL Server 2008 T-SQL Programming | |
Beutner et al. | AutoHyper: Explicit-state model checking for HyperLTL | |
Bergmann | Incremental model queries in model-driven design | |
Milovanovic et al. | An interactive tool for UML class model evolution in database applications | |
Suárez-Cabal et al. | Incremental test data generation for database queries | |
Havelund et al. | An extension of first-order LTL with rules with application to runtime verification | |
CN107870857A (zh) | 一种针对查询计划生成器进行测试的方法及装置 | |
EP3486799A1 (en) | Reporting and data governance management | |
Zhang et al. | Composite‐Level Conflict Detection in UML Model Versioning | |
Hayes et al. | Software specification | |
Manousis et al. | Extraction of embedded queries via static analysis of host code | |
Püroja | LDBC Social Network Benchmark Interactive v2 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180403 |
|
RJ01 | Rejection of invention patent application after publication |