CN112988782A - Hive支持交互式查询的方法、装置及存储介质 - Google Patents
Hive支持交互式查询的方法、装置及存储介质 Download PDFInfo
- Publication number
- CN112988782A CN112988782A CN202110186758.9A CN202110186758A CN112988782A CN 112988782 A CN112988782 A CN 112988782A CN 202110186758 A CN202110186758 A CN 202110186758A CN 112988782 A CN112988782 A CN 112988782A
- Authority
- CN
- China
- Prior art keywords
- hive
- sql statement
- execution engine
- execution
- interactive
- 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.)
- Granted
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/242—Query formulation
- G06F16/2423—Interactive query statement specification based on a database schema
-
- 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
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种Hive支持交互式查询的方法、装置及存储介质,用于提高Hive的数据分析处理性能。本公开在SQL的解析和优化过程中,根据每张表的数据量或根据基于代价的优化规则操作树节点输出的数据量或输出的总记录条数来选择适合的执行引擎,使Hive同时支持批处理和交互式查询引擎,实现由Hive提供统一的SQL入口,融合交互式和批处理执行引擎,以提高Hive的数据分析处理性能。
Description
技术领域
本公开涉及大数据技术领域,尤其涉及一种Hive支持交互式查询的方法、装置及存储介质。
背景技术
Hive是基于Hadoop构建的一套数据仓库分析工具,提供一种类SQL的查询语言HQL(Hive Query Language),对结构化和半结构化数据进行批量分析,完成数据计算。HQL具有对海量数据的处理能力,Hive可将执行的HQL语句转换为分布式计算任务,从而完成海量数据的查询和分析工作。同时,为了满足不同场景的需求,HQL能通过实现用户自定义函数(UDF)、用户自定义聚合函数(UDAF)以及用户自定义表函数(UDTF)对其进行扩展。
Hive架构中的Thrift HiveServer或HiveServer2(以下统称为Hive服务)用于对外提供Hive数据库服务,将用户提交的HQL语句进行编译,解析成对应的Map/Reduce任务或者HDFS操作,从而完成数据的提取、转换和分析。MetaStore提供Hive的元数据服务,负责Hive表结构和属性信息的读、写、维护和修改。提供Thrift接口,供HiveServer2、Spark和WebHCat等MetaStore客户端来访问,操作元数据。
Presto是定位在数据仓库和数据分析业务的分布式SQL引擎,适用于交互式分析查询,比较适合的应用场景有ETL、Ad-Hoc查询、海量结构化数据与半结构化数据分析以及海量多维数据聚合与报表。由于Presto的数据都是在内存中,因此限制了在内存中的数据集大小。目前Presto可以支持Mysql、PostgreSQL、Cassanda、Hive、Kafka、JMX等多种数据源,可以完全支持ANSI SQL,具有很好的扩展性,开发人员可以很容易地开发出适合于自己特定数据源的Connector,并且可以使用SQL语句查询和分析自定义Connector中的数据。在数据库中的每种数据源都对应一种特定的Connector,用户可以根据业务需要在Presto中针对一种类型的Connector配置一个或者多个Catalog并查询其中的数据,用户可以混合多个Catalog进行join查询和计算。
在SQL语句的执行过程中,需要对执行计划进行优化,基于代价的优化(Cost-Based Optimization,CBO)策略是指从多个可能的语法树中选择一条代价最小的语法树来执行,换个说法,CBO的核心在于评估出一条给定语法树的实际代价。评估给定整棵语法树的执行代价,需要先评估每个节点执行的代价,最后将所有节点代价累加。而要评估单个节点执行实际代价,又需要知道两点,其一是这种算子的代价规则,每种算子的代价计算规则必然都不同,比如Merge-Sort Join、Shuffle Hash Join、GroupBy都有自己的一套代价计算算法。其二是参与操作的数据集基本信息(大小、总记录条数),比如实际参与Merge-SortJoin的两表大小。通常来讲,节点实际执行代价主要从两个维度来定义:处理器代价(CPUCost)以及输入输出代价(IO Cost)。
目前对接大数据项目,使用Hive做数据开发的厂商仍占据大多数,HQL作为Hadoop数据仓库事实标准,具备了广泛的使用用户。但是由于Hive底层执行框架采用离线计算框架MapReduce,在某些场景下处理性能达不到要求。如果采用Presto进行处理,对于较为复杂的SQL语句或表数据量较大时,可能会导致任务执行失败。
发明内容
有鉴于此,本公开提供一种Hive支持交互式查询的方法、装置及存储介质,用于提高Hive数据处理的兼容性和处理性能。
图1为本公开提供的一种Hive支持交互式查询的方法的步骤流程图,该方法应用于Hive服务,该方法包括:
步骤101.在对SQL语句进行语义解析过程中,遍历SQL语句中的每张表,从元数据服务中获取SQL语句中每张表的表属性。
步骤102.在对所述SQL语句进行优化的过程中,基于所获取的表属性从分布式文件系统中获取每张表的数据量,判断每张表的数据量是否小于预设的第一阈值,若小于第一阈值,则选择交互式执行引擎处理所述SQL语句,否则选择Hive的批处理执行引擎处理所述SQL语句。
进一步地,在使用基于代价的优化CBO规则对所述SQL语句进行优化的过程中,判断操作树节点输出的数据量或输出的总记录条数是否小于预设的第二阈值,若小于则选择交互式执行引擎处理所述SQL语句,否则选择批处理执行引擎处理所述SQL语句。
进一步地,所述使用基于代价的优化CBO规则对所述SQL语句进行优化,并选择交互式执行引擎处理所述SQL语句的过程包括:
Hive调用SQL解析工具Calcite执行CBO优化;
遍历Hive中的操作树并引入强制转换函数进行类型转换;
通过Hive的Calcite运算符进行SQL语句的执行成本计算,将Hive操作树转换为Calcite操作树;
将基于代价的优化规则作用于Calcite操作树进行优化;
遍历优化后的Calcite操作树,将其转换为Hive语法树,然后重新运行Hive优化器并生成执行计划;
当基于优化后的Calcite操作树判定节点输出的数据量或输出的总记录条数小于预设的第二阈值时,使用交互式执行引擎基于生成的执行计划执行所述SQL语句。
进一步地,所述第一阈值和第二阈值根据交互式执行引擎的内存空间的大小和数据处理性能测试确定。
进一步地,所述交互式执行引擎为Presto执行引擎,所述批处理执行引擎为Hive自身的执行引擎;所述方法还包括:
将Hive识别的SQL语句转化为Presto识别的SQL语句,由Presto执行引擎执行所述SQL语句;
在Presto执行引擎执行完SQL语句后,获取Presto执行引擎执行的结果,判断执行结果是否成功以及是否超时。
图2为本公开提供的一种Hive支持交互式查询的装置结构示意图,该装置200中的各功能模块可以采用软件、硬件或软硬件相结合的方式实现。各模块可部署在一个硬件设备上实施上述方法的所有步骤,也可分散部署在不同硬件设备上由多个硬件设备分别实施上述方法中的一个或若干步骤从而共同实施以实现本公开的发明目的。当由多个硬件设备共同实施时,由于各硬件设备之间相互协作的目的是共同实现本发明目的,一方的动作和处理结果确定了另一方的动作执行的时机及可能获得的结果,因此,在逻辑上可视为各模块彼此之间具有相互指挥和控制关系。该装置200包括:
表属性获取模块210,用于在对SQL语句进行语义解析过程中,遍历SQL语句中的每张表,从元数据服务中获取SQL语句中每张表的表属性;
第一优化选择模块220,用于在对所述SQL语句进行优化的过程中,基于所获取的表属性从分布式文件系统中获取每张表的数据量,判断每张表的数据量是否小于预设的第一阈值,若小于第一阈值,则选择交互式执行引擎处理所述SQL语句,否则选择Hive的批处理执行引擎处理所述SQL语句。
进一步地,所述装置200还包括:
第二优化选择模块230,在使用基于代价的优化CBO规则对所述SQL语句进行优化的过程中,判断操作树节点输出的数据量或输出的总记录条数是否小于预设的第二阈值,若小于则选择交互式执行引擎处理所述SQL语句,否则选择批处理执行引擎处理所述SQL语句。
进一步地,所述第二优化选择模块230包括:
第一操作树转换单元231,用于在Hive调用SQL解析工具Calcite执行CBO优化时,遍历Hive中的操作树并引入强制转换函数进行类型转换;通过Hive的Calcite运算符进行SQL语句的执行成本计算,将Hive操作树转换为Calcite操作树;
优化选择单元232,用于将基于代价的优化规则作用于Calcite操作树进行优化;基于优化后的Calcite操作树判定节点输出的数据量或输出的总记录条数是否小于预设的第二阈值时,当小于时选择交互式执行引擎,否则选择批处理执行引擎;
第二操作树转换单元233,用于遍历优化后的Calcite操作树,将其转换为Hive语法树;重新运行Hive优化器并生成执行计划;
执行单元234,用于根据优化选择单元232选定的交互式执行引擎或批处理执行引擎按照执行计划执行所述SQL语句。
进一步地,所述交互式执行引擎为Presto执行引擎,所述批处理执行引擎为Hive自身的执行引擎;所述装置200还包括:
语句转换模块240,将Hive识别的SQL语句转化为Presto识别的SQL语句,由Presto执行引擎执行所述SQL语句;
结果获取模块241,用于在Presto执行引擎执行完SQL语句后,获取Presto执行引擎执行的结果,判断执行结果是否成功以及是否超时。
图3为本公开一实施例提供的一种电子设备结构示意图,该设备300包括:诸如中央处理单元(CPU)的处理器310、通信总线320、通信接口340以及存储介质330。其中,处理器310与存储介质330可以通过通信总线320相互通信。存储介质330内存储有计算机程序,当该计算机程序被处理器310执行时即可实现本公开提供的方法的各步骤。
其中,存储介质可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volat i le Memory,NVM),例如至少一个磁盘存储器。另外,存储介质还可以是至少一个位于远离前述处理器的存储装置。处理器可以是通用处理器,包括中央处理器(Central Process ing Uni t,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digi tal Signal Process ing,DSP)、专用集成电路(Applicat ion Specific Integrated Circui t,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本公开在SQL的解析和优化过程中,根据每张表的数据量或根据基于代价的优化规则操作树节点输出的数据量或输出的总记录条数来选择适合的执行引擎,使Hive同时支持批处理和交互式查询引擎,实现由Hive提供统一的SQL入口,融合交互式和批处理执行引擎,以提高Hive的数据分析处理性能。
附图说明
为了更加清楚地说明本公开实施例或者现有技术中的技术方案,下面将对本公开实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本公开实施例的这些附图获得其他的附图。
图1为本公开提供的一种Hive支持交互式查询的方法的步骤流程图;
图2为本公开提供的一种Hive支持交互式查询的装置结构示意图;
图3为本公开一实施例提供的一种电子设备结构示意图;
图4为本公开一实施例提供的Hive数据查询处理框架结构示意图;
图5为本公开一实施例使用Calcite对SQL请求进行语义解析的步骤流程图;
图6为本公开一实施例中Hive调用Calcite的CBO优化器进行优化的处理步骤;
图7为本公开一实施提供的Hive支持交互式查询的方法步骤流程图。
具体实施方式
在本公开实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本公开实施例。本公开实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。本公开中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本公开的目的是实现Hive同时支持批处理和交互式查询引擎,实现由Hive提供统一的SQL入口,融合交互式(例如Presto)和批处理(例如MR、Spark)计算引擎,通过扩展SQL解析和优化规则智能选择最佳执行引擎,以提高Hive的数据分析处理性能。
图4为本公开一实施例提供的Hive数据查询处理框架结构示意图,在该处理框架中,Hive服务(Thrift HiveServer或HiveServer2)用于接收远程客户端提交的数据处理请求并向远程客户端反馈执行结果。批处理执行引擎(Hive Execution engine)用于处理执行代价较高的SQL请求,交互式执行引擎(Presto Execution engine)用于处理执行代价较低的SQL请求。
远程客户端(remote client)可通过beeline或者JDBC/ODBC接口连接Hive服务,并向Hive服务发送SQL请求。Hive服务接收到SQL请求后,先进行语法解析(例如使用antlr3工具)得到语法树,然后进行语义解析得到已解析过的语法树即QueryBlock,并对QueryBlock执行优化规则。在语义解析时,Hive服务会与Hive元数据服务MetaStore进行交互,获取SQL语句中涉及到的表信息。Hive服务进行语义解析和Optimizer优化后,会根据预设的优化规则,基于SQL语句的执行代价选择适合执行当前SQL请求的执行引擎。
图4的Hive框架结构中,Presto交互式执行引擎被融合进Hive当中,融合的关键在于对SQL请求的解析优化过程进行改进,在其中加入了选择适合当前SQL请求的执行引擎的步骤。
SQL请求在被执行引擎执行之前,需要经过语法解析、语义解析和优化三个步骤。Apache的Calcite是一种广泛应用的独立于存储与执行的SQL解析、优化引擎。在本公开实施例中,Hive利用Calcite进行基于代价的优化(Cost Based Optimization,CBO),HiveCBO优化主要实现于CalcitePlanner类中,CalcitePlanner继承自语义分析器SemanticAnalyzer。在语义解析阶段,CalcitePlanner(开启CBO,默认)或SemanticAnalyzer语义分析器调用analyzeInternal方法进行语义解析,图5为该实施例中使用Calcite对SQL请求进行语义解析的步骤流程图。
步骤501.对SQL语句进行语法解析得到抽象语法树(Abstract Syntax Tree,AST),遍历AST中每个Token符号,根据不同关键字进行处理,并与元数据进行关联生成语法解析树即QueryBlock。
步骤502.遍历语法解析树QueryBlock,翻译为执行操作树OperatorTree,在该步骤中开启基于代价的CBO优化。
该步骤中,会通过genOPTree方法调用Calcite的CBO优化器,本公开实施例对这个处理步骤进行了改进,在该步骤中根据表的数据量或CBO优化后输出结果的数据量或记录条数,选择合适的执行引擎对SQL语句进行处理。
步骤503.推导结果集的计划Schema信息,生成字段计划fieldSchemas。
步骤504.为优化器Optimizer和物理编译器Physical compiler创建解析器上下文ParserContext。
步骤505.创建优化器,并对逻辑计划进行优化。
步骤506.进行物理计划优化,并生成指定执行引擎的任务。
该实施例中,批处理和交互式执行引擎的融合步骤发生在CalcitePlanner中CBO优化阶段之后,开启CBO后在上述流程中的genOPTree步骤中会调用Calcite的CBO优化器,图6为该实施例由Hive调用Calcite的CBO优化器进行优化的处理步骤。
Hive调用Calcite执行CBO优化(简称Hive CBO)的步骤如下:
步骤S11.遍历Hive中的操作树Operator Tree,并确保操作树不包含任何不能翻译为Calcite的操作,例如Lateral View,PTF,Cubes和Rollups,MultiTable Insert等。
步骤S12.遍历操作树Operator Tree并引入强制转换函数,以确保所有比较(隐式和显式)都是严格类型安全的(类型必须在两侧相同)。
步骤S13.实现特定于Hive的Calcite运算符,该运算符将进行SQL语句的执行成本计算。
步骤S14.将Hive Operator Tree转换为Calcite Operator Tree操作树。
该步骤中将Hive中SQL表达式转化为calcite可以识别的表达式;将Hive中SQL使用的运算符转化为calcite可以识别的运算符。接下来处理隐藏的列,是指sql中没有指明的列,比如sql中重命名的列。
对于Hive Operator Tree中涉及到的shuffle所需的列和join表达式,都转化为calcite识别的列和jion,这时得到Calcite Operator Tree。
步骤S15.将基于代价的优化规则作用于Calcite Operator Tree,使用VolcanoOptimizer优化器优化Calcite Operator Tree。
步骤S16.遍历优化后的Calcite Operator Tree树,将其转换为hive可以识别的语法树,然后重新运行Hive优化器并生成执行计划。
遍历优化后的Calcite Operator Tree树,通过引入派生表以将操作树转换为SQL。然后遍历Calcite Operator Tree树并转换为AST。根据Calcite Hint修改计划生成器。最后重新运行Hive优化器并生成执行计划(此第二遍将不会调用Calcite优化器)。
在Hive CBO进行优化的过程中,可以利用SQL代价计算模式以及表相关统计信息进行优化,在上述CBO优化步骤中,Calcite Volcano会对执行计划的代价进行评估,对SQL请求选择批处理执行框架还是交互式执行框架进行区分。
图7为本公开一实施提供的Hive支持交互式查询的方法步骤流程图,该方法包括:
本公开在Hive CBO优化后,采用预设的执行引擎选择规则进行执行引擎选择的步骤如下:
步骤701.在语法解析过程中,通过对SQL请求中的SQL语句进行语法解析,获得抽象语法树。
在该步骤中会对SQL语句的语法进行检查和解析,解析通过后生成抽象语法树AST供后续进行语义解析使用。
步骤702.在语义解析过程中,遍历SQL语句中的每张表,从元数据服务中获取到SQL语句中每张表的表属性。
在该步骤中,语义解析器SemanticAnalyzer会首先判断SQL请求所涉及的表是否存在,表的列信息是否正确,然后会从元数据服务MetaStore中读取SQL请求所涉及的表的属性,所述表的属性包括表的记录条数、表数据的存储路径等。
步骤703.在优化过程中,基于表属性从分布式文件系统中获取每张表的数据量,判断每张表的数据量是否小于预设的第一阈值,若小于第一阈值,则选择交互式执行引擎进行处理,否则执行步骤704。
如果在SQL语句的优化过程中,Hive未开启基于代价的优化CBO时,在解析过程结束,即可使用优化规则1进行执行引擎的选择,当每张表的数据量都小于预设的第一阈值时,选择交互式执行引擎处理该SQL语句,否则选择批处理执行引擎处理该SQL语句。当开启CBO优化规则时,若判断结果是不小于第一阈值,则执行步骤704。
该步骤中表的数据量是根据从元数据服务中获取的表属性从分布式文件系统(例如HDFS)中获取每张表中包含的数据量。
该步骤中的第一阈值是根据交互式执行引擎的内存空间的大小和数据处理性能来确定的,目的是避免造成内存不足或溢出导致性能大幅下降。第一阈值的设置方式可以通过多次测试来确定,在刚开始的时候可以设定一个固定值例如1G,经过多次的性能测试,最终确定一个较优的值。
步骤704.在基于代价的优化CBO过程中,判断操作树节点输出的数据量或输出的总记录条数是否小于预设的第二阈值,若小于则选择交互式执行引擎处理该SQL语句,否则选择批处理执行引擎处理该SQL语句。
该步骤中,基于Hive的已有CBO规则执行优化,得到Calcite Operator Tree操作树,然后分析操作树中节点输出结果的数据量输出结果的总记录条数,当判定输出数据量或总记录条数小于预设的第二阈值时,选择交互式执行引擎Presto Execution Engine来处理当前的SQL语句,否则选择Hive的批处理执行引擎Hive Execution Engine来处理该SQL语句。
该步骤中的第二阈值同样也是需要根据交互式执行引擎的内存空间的大小和数据处理性能来确定的。第二阈值的设置方式也可通过多次测试来确定,在刚开始的时候可以设定一个固定值,例如1G,经过多次的性能测试,最终确定一个较优的值。
Hive的CBO规则,可以大致计算出逻辑计划logicalPlan中每个节点node的输出结果记录条数,在测试确定阈值的过程中,统计出是logicalPlan的每个node的CPU和内存消耗代价,分析出消耗代价与计算耗时之间的相对关系,根据这个关系,自适应的选择较优的CPU和内存消耗代价,从而确定出相应的阈值。
为实现本公开的发明目的,该示例对Presto Execution Engine的实现也做了改进,改进的内容包括:
将hive识别的SQL语句转化为Presto识别的SQL语句,在Presto执行完SQL语句后获取执行的结果,判断执行结果是否成功以及是否超时等。判断执行是否超时的方法可以通过添加守护线程的方式来周期监控Presto执行SQL语句的进度,根据设定的执行时间阈值来判断。
目前,Hive QL作为Hadoop数仓事实标准,具备了广泛的使用用户。但是由于Hive底层执行框架采用的是离线计算框架MapReduce,虽然高版本Hive已经能够支持Tez或Spark的DAG计算框架,但由于Shuffle的存在仍属于重型批处理框架,处理性能备受诟病。因此在处理TB级规模数据量时,融合使用交互式执行引擎Presto计算框架,能够极大提高了查询和处理性能。对于较为复杂的SQL语句或表数据量较大时,采用Hive批处理执行引擎进行离线分析,可保证任务的成功执行得到结果。本公开提供的技术方案,在将Hive作为SQL语句的统一入口的情况下,既能够发挥Presto的交互查询的优势,又兼容Hive处理离线任务的特点,从整体上提高了Hive数据处理的兼容性和处理性能。
应当认识到,本公开的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术,包括配置有计算机程序的非暂时性存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本公开描述的过程的操作,除非本公开另外指示或以其他方式明显地与上下文矛盾。本公开描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本公开的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本公开所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本公开所述的方法和技术编程时,本公开还包括计算机本身。
以上所述仅为本公开的实施例而已,并不用于限制本公开。对于本领域技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种Hive支持交互式查询方法,其特征在于,该方法应用于Hive服务,所述方法包括:
在对SQL语句进行语义解析过程中,遍历SQL语句中的每张表,从元数据服务中获取SQL语句中每张表的表属性;
在对所述SQL语句进行优化的过程中,基于所获取的表属性从分布式文件系统中获取每张表的数据量,判断每张表的数据量是否小于预设的第一阈值,若小于第一阈值,则选择交互式执行引擎处理所述SQL语句,否则选择Hive的批处理执行引擎处理所述SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在使用基于代价的优化CBO规则对所述SQL语句进行优化的过程中,判断操作树节点输出的数据量或输出的总记录条数是否小于预设的第二阈值,若小于则选择交互式执行引擎处理所述SQL语句,否则选择批处理执行引擎处理所述SQL语句。
3.根据权利要求2所述的方法,其特征在于,所述使用基于代价的优化CBO规则对所述SQL语句进行优化,并选择交互式执行引擎处理所述SQL语句的过程包括:
Hive调用SQL解析工具Calcite执行CBO优化;
遍历Hive中的操作树并引入强制转换函数进行类型转换;
通过Hive的Calcite运算符进行SQL语句的执行成本计算,将Hive操作树转换为Calcite操作树;
将基于代价的优化规则作用于Calcite操作树进行优化;
遍历优化后的Calcite操作树,将其转换为Hive语法树,然后重新运行Hive优化器并生成执行计划;
当基于优化后的Calcite操作树判定节点输出的数据量或输出的总记录条数小于预设的第二阈值时,使用交互式执行引擎基于生成的执行计划执行所述SQL语句。
4.根据权利要求3所述的方法,其特征在于,
所述第一阈值和第二阈值根据交互式执行引擎的内存空间的大小和数据处理性能测试确定。
5.根据权利要求3所述的方法,其特征在于,所述交互式执行引擎为Presto执行引擎,所述批处理执行引擎为Hive自身的执行引擎;所述方法还包括:
将Hive识别的SQL语句转化为Presto识别的SQL语句,由Presto执行引擎执行所述SQL语句;
在Presto执行引擎执行完SQL语句后,获取Presto执行引擎执行的结果,判断执行结果是否成功以及是否超时。
6.一种Hive支持交互式查询装置,其特征在于,该装置包括:
表属性获取模块,用于在对SQL语句进行语义解析过程中,遍历SQL语句中的每张表,从元数据服务中获取SQL语句中每张表的表属性;
第一优化选择模块,用于在对所述SQL语句进行优化的过程中,基于所获取的表属性从分布式文件系统中获取每张表的数据量,判断每张表的数据量是否小于预设的第一阈值,若小于第一阈值,则选择交互式执行引擎处理所述SQL语句,否则选择Hive的批处理执行引擎处理所述SQL语句。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第二优化选择模块,在使用基于代价的优化CBO规则对所述SQL语句进行优化的过程中,判断操作树节点输出的数据量或输出的总记录条数是否小于预设的第二阈值,若小于则选择交互式执行引擎处理所述SQL语句,否则选择批处理执行引擎处理所述SQL语句。
8.根据权利要求7所述的装置,其特征在于,所述第二优化选择模块包括:
第一操作树转换单元,用于在Hive调用SQL解析工具Calcite执行CBO优化时,遍历Hive中的操作树并引入强制转换函数进行类型转换;通过Hive的Calcite运算符进行SQL语句的执行成本计算,将Hive操作树转换为Calcite操作树;
优化选择单元,用于将基于代价的优化规则作用于Calcite操作树进行优化;基于优化后的Calcite操作树判定节点输出的数据量或输出的总记录条数是否小于预设的第二阈值时,当小于时选择交互式执行引擎,否则选择批处理执行引擎;
第二操作树转换单元,用于遍历优化后的Calcite操作树,将其转换为Hive语法树;重新运行Hive优化器并生成执行计划;
执行单元,用于根据优化选择单元选定的交互式执行引擎或批处理执行引擎按照执行计划执行所述SQL语句。
9.根据权利要求8所述的装置,其特征在于,所述交互式执行引擎为Presto执行引擎,所述批处理执行引擎为Hive自身的执行引擎;
所述装置还包括:
语句转换模块,将Hive识别的SQL语句转化为Presto识别的SQL语句,由Presto执行引擎执行所述SQL语句;
结果获取模块,用于在Presto执行引擎执行完SQL语句后,获取Presto执行引擎执行的结果,判断执行结果是否成功以及是否超时。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序当被处理器执行时实施如权利要求1至5中任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110186758.9A CN112988782B (zh) | 2021-02-18 | 2021-02-18 | Hive支持交互式查询的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110186758.9A CN112988782B (zh) | 2021-02-18 | 2021-02-18 | Hive支持交互式查询的方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112988782A true CN112988782A (zh) | 2021-06-18 |
CN112988782B CN112988782B (zh) | 2022-08-30 |
Family
ID=76393393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110186758.9A Active CN112988782B (zh) | 2021-02-18 | 2021-02-18 | Hive支持交互式查询的方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112988782B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116683A (zh) * | 2022-01-27 | 2022-03-01 | 深圳市明源云科技有限公司 | 计算平台的多语法处理方法、设备及可读存储介质 |
CN115033595A (zh) * | 2022-08-10 | 2022-09-09 | 杭州悦数科技有限公司 | 基于超级节点的查询语句处理方法、系统、装置和介质 |
CN116048817A (zh) * | 2023-03-29 | 2023-05-02 | 腾讯科技(深圳)有限公司 | 数据处理控制方法、装置、计算机设备和存储介质 |
CN116226237A (zh) * | 2023-04-27 | 2023-06-06 | 天津南大通用数据技术股份有限公司 | 一种支持多个计算引擎的分布式查询计划生成方法及装置 |
CN116303372A (zh) * | 2023-05-19 | 2023-06-23 | 山东未来网络研究院(紫金山实验室工业互联网创新应用基地) | 一种基于Hive的前置知识库优化方法 |
CN117743398A (zh) * | 2023-12-15 | 2024-03-22 | 智人开源(北京)科技有限公司 | 一种在流数据库中基于规则的实时决策及数据处理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667190A (zh) * | 2009-09-29 | 2010-03-10 | 天津大学 | 基于XQuery的查询引擎系统 |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
US20170068710A1 (en) * | 2015-09-03 | 2017-03-09 | Teradata Us, Inc. | Collecting statistics in unconventional database environments |
CN106649503A (zh) * | 2016-10-11 | 2017-05-10 | 北京集奥聚合科技有限公司 | 一种基于sql的查询方法及系统 |
US20200151170A1 (en) * | 2018-11-14 | 2020-05-14 | Baidu Online Network Technology (Beijing) Co., Ltd. | Spark query method and system supporting trusted computing |
-
2021
- 2021-02-18 CN CN202110186758.9A patent/CN112988782B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667190A (zh) * | 2009-09-29 | 2010-03-10 | 天津大学 | 基于XQuery的查询引擎系统 |
US20170068710A1 (en) * | 2015-09-03 | 2017-03-09 | Teradata Us, Inc. | Collecting statistics in unconventional database environments |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
CN106649503A (zh) * | 2016-10-11 | 2017-05-10 | 北京集奥聚合科技有限公司 | 一种基于sql的查询方法及系统 |
US20200151170A1 (en) * | 2018-11-14 | 2020-05-14 | Baidu Online Network Technology (Beijing) Co., Ltd. | Spark query method and system supporting trusted computing |
Non-Patent Citations (4)
Title |
---|
BEGOLI, EDMON: "《SIGMOD"18: PROCEEDINGS OF THE 2018 INTERNATIONAL CONFERENCE ON MANAGEMENT OF DATA》", 19 March 2019 * |
吴黎兵等: "基于Hadoop的SQL查询引擎性能研究", 《华中师范大学学报(自然科学版)》 * |
张仪: "跨平台统一大数据智能化SQL查询系统研究与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
李聪颖等: "基于Hadoop的交互式大数据分析查询处理方法", 《计算机技术与发展》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116683A (zh) * | 2022-01-27 | 2022-03-01 | 深圳市明源云科技有限公司 | 计算平台的多语法处理方法、设备及可读存储介质 |
CN115033595A (zh) * | 2022-08-10 | 2022-09-09 | 杭州悦数科技有限公司 | 基于超级节点的查询语句处理方法、系统、装置和介质 |
CN116048817A (zh) * | 2023-03-29 | 2023-05-02 | 腾讯科技(深圳)有限公司 | 数据处理控制方法、装置、计算机设备和存储介质 |
CN116226237A (zh) * | 2023-04-27 | 2023-06-06 | 天津南大通用数据技术股份有限公司 | 一种支持多个计算引擎的分布式查询计划生成方法及装置 |
CN116303372A (zh) * | 2023-05-19 | 2023-06-23 | 山东未来网络研究院(紫金山实验室工业互联网创新应用基地) | 一种基于Hive的前置知识库优化方法 |
CN117743398A (zh) * | 2023-12-15 | 2024-03-22 | 智人开源(北京)科技有限公司 | 一种在流数据库中基于规则的实时决策及数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112988782B (zh) | 2022-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
US10642832B1 (en) | Reducing the domain of a subquery by retrieving constraints from the outer query | |
US9009140B2 (en) | Optimization of database query | |
JP2021515923A (ja) | クエリオプティマイザ制約 | |
US7111025B2 (en) | Information retrieval system and method using index ANDing for improving performance | |
US8285707B2 (en) | Method of querying relational database management systems | |
US8332389B2 (en) | Join order for a database query | |
US20070156736A1 (en) | Method and apparatus for automatically detecting a latent referential integrity relationship between different tables of a database | |
US20070214104A1 (en) | Method and system for locking execution plan during database migration | |
US20070250517A1 (en) | Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries | |
US8135702B2 (en) | Eliminating unnecessary statistics collections for query optimization | |
CN115617830A (zh) | 一种基于机器学习的数据查询优化处理方法及装置 | |
CN111078705A (zh) | 基于Spark平台建立数据索引方法及数据查询方法 | |
CN112925720A (zh) | 一种软件sql测试方法、装置、存储介质及系统 | |
US11354313B2 (en) | Transforming a user-defined table function to a derived table in a database management system | |
EP3293645B1 (en) | Iterative evaluation of data through simd processor registers | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
CN117131230A (zh) | 数据血缘分析方法、装置、设备及存储介质 | |
CN110580170A (zh) | 软件性能风险的识别方法及装置 | |
CN110399378B (zh) | 数据库系统锁操作分析方法及装置 | |
CN108388589B (zh) | 一种数据库sql查询语句自动生成的装置 | |
CN115292285A (zh) | 一种基于分布式架构的数据专题管理方法及系统 | |
US9378229B1 (en) | Index selection based on a compressed workload | |
Lindvall et al. | A comparison of latency for MongoDB and PostgreSQL with a focus on analysis of source code | |
CN112783758A (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 |