CN115858589A - 一种Hive数仓动态智能分区方法及系统 - Google Patents
一种Hive数仓动态智能分区方法及系统 Download PDFInfo
- Publication number
- CN115858589A CN115858589A CN202211594936.2A CN202211594936A CN115858589A CN 115858589 A CN115858589 A CN 115858589A CN 202211594936 A CN202211594936 A CN 202211594936A CN 115858589 A CN115858589 A CN 115858589A
- Authority
- CN
- China
- Prior art keywords
- dynamic
- hive
- partitioning
- partition
- partitions
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种Hive数仓动态智能分区方法及系统,包括:根据业务需要,设定Hive数仓动态分区的动态因子;获取数据存储指令;根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。通过设定影响Hive数仓动态分区的动态因子,改变底层分区算法逻辑,且由此在查询时过滤不需要扫描的分区,从而减少数据扫描量,提高查询效率。
Description
技术领域
本发明涉及数仓动态分区技术领域,特别是涉及一种Hive数仓动态智能分区方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
目前分布式能源并网数据量巨大,海量监测数据是Hive数仓中一个或几个分区所容纳不了的,因此海量监测数据存入Hive数仓的过程中会涉及Hive数仓分区。
但是,现有Hive数仓的分区是随机的,因此插入分区表中的业务数据也是随机的;那么在后续进行查询等操作时,存在处理效率低的问题,导致后续针对数仓数据应用时读取效率低下,因此需要一种能够提高处理效率的Hive数仓动态智能分区技术。
发明内容
为了解决上述问题,本发明提出了一种Hive数仓动态智能分区方法及系统,通过设定影响Hive数仓动态分区的动态因子,改变底层分区算法逻辑,且由此在查询时过滤不需要扫描的分区,从而减少数据扫描量,提高查询效率。
为了实现上述目的,本发明采用如下技术方案:
第一方面,本发明提供一种Hive数仓动态智能分区方法,包括:
根据业务需要,设定Hive数仓动态分区的动态因子;
获取数据存储指令;
根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
作为可选择的实施方式,所述动态因子包括四类;其中,动态因子0表示无需分区,动态因子1表示全国业务,动态因子2表示各省份业务,动态因子3表示各地市业务。
作为可选择的实施方式,查询业务数据时,接收查询指令,确定所属动态因子,根据动态因子扫描对应的分区,从而完成数据查询。
作为可选择的实施方式,扫描分区的过程中,初始化根节点x,获取与根节点x直接连接的节点y,递归搜索以y为根的子树,计算x的追溯值,直至得到全部x的追溯值,从而得到最小访问时间的目标结果。
作为可选择的实施方式,根据动态因子进行数据扫描,过滤不需要扫描的分区。
作为可选择的实施方式,查询业务数据的过程还包括:
初始化根节点x的时间戳与追溯值,确定根节点x的关系指向;
获取与根节点x直接连接的第一个相邻节点的序号;以及迭代获取剩下的与根节点x直接连接的节点的序号,从而对每个相邻节点的序号执行Tarjan算法,循环依次判断直接相连的节点y的序号i是否被访问过;
根据判断结果,判断是否进行分区以及进行数据搜索。
作为可选择的实施方式,若当前节点y没有被访问过,且动态因子表示无需分区,则按原有逻辑执行;
若当前节点y没有被访问过,且动态因子表示需分区,则根据动态因子进行动态分区;
分区后,递归搜索以y为根的子树,计算x的追溯值,直至得到全部x的追溯值,从而得到最小访问时间的目标结果。
第二方面,本发明提供一种Hive数仓动态智能分区系统,包括:
动态因子指定模块,被配置为根据业务需要,设定Hive数仓动态分区的动态因子;
指令获取模块,被配置为获取数据存储指令;
动态因子确定模块,被配置为根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
分区模块,被配置为根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
第三方面,本发明提供一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成第一方面所述的方法。
第四方面,本发明提供一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。
与现有技术相比,本发明的有益效果为:
本发明提出一种Hive数仓动态智能分区方法及系统,将海量监测数据根据实际业务需求,即全国省市县行政区域的数据按各自行政区域划分分区,将全国各省的数据单独分区存放,每个省各地市的分布式能源数据单独分区存放,后续进行查询等操作时,相比于Hive数仓随机分区、随机存储数据,本发明方法处理效率有很大提高。
本发明提出一种Hive数仓动态智能分区方法及系统,通过设定Hive数仓动态分区的动态因子,改变底层分区算法逻辑,且由此在查询时过滤不需要扫描的分区,从而减少数据扫描量,提高执行性能,查询效率更高。
本发明提出一种Hive数仓动态智能分区方法及系统,将Hive的自动分区技术优化为智能动态分区,更符合业务逻辑和人机操作逻辑,且通过查询智能动态分区后的分区结构,提高查询效率。涉及全国各省份、各地市行政区域性质的大数据智能存储的业务,都可以用此基于改进Tarjan算法的Hive数仓智能分区技术,智能改变Hive分区方式,提高海量数据的存储、检索等操作效率。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明实施例1提供的Hive数仓动态智能分区方法流程图。
具体实施方式
下面结合附图与实施例对本发明做进一步说明。
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
实施例1
Hive分区又分为单值分区、范围分区,单值分区又分为静态分区和动态分区。分区的含义:设一张表名为persionrank表,记录每个人的评级,有id、name、score字段,便可以创建分区rank,rank不是表中的列,可以把它当做虚拟列,并将相应数据导入指定分区,即将数据插入指定目录。
Hive分区相关的语句:
set hive.exec.dynamic.partition=true;--是否允许动态分区;默认值:false;是否开启动态分区功能,默认false关闭;使用动态分区时候,该参数必须设置成true。
set hive.exec.dynamic.partition.mode=nonstrict;--分区模式设置;默认值:strict;动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区。nonstrict模式:表示允许所有的分区字段都可以使用动态分区。
set hive.exec.max.dynamic.partitions.pernode=1000;--单个节点上的mapper/reducer允许创建的最大分区;默认值:100;在每个执行MR的节点上,最大可以创建多少个动态分区,该参数需要根据实际的数据来设定;比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。
set hive.exec.max.dynamic.partitions=1500;--允许动态分区的最大数量;默认值:1000;在所有执行MR的节点上,最大一共可以创建多少个动态分区。
hive.exec.max.created.files=100000;--一个mapreduce作业能创建的HDFS文件最大数;默认值:100000;整个MR Job中,最大可以创建多少个HDFS文件。一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于100000,可根据实际情况加以调整。
hive.error.on.empty.partition=false;--在动态分区插入产生空结果时是否抛出异常。
在本实施例中,提供一种基于改进Tarjan算法的Hive数仓动态智能分区方法,提高Hive数仓查询效率,解决随机分区不均匀导致的查询效率慢的问题;
如图1所示,具体包括:
根据业务需要,设定Hive数仓动态分区的动态因子;
获取数据存储指令;
根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
在本实施例中,根据业务实际需要,基于改进的Tarjan算法,增加一个代表影响Hive数仓动态分区的动态因子;
所述动态因子包括四类;其中,动态因子0表示无需分区;动态因子1表示全国业务;动态因子2表示各省份业务;动态因子3表示各地市业务。
在本实施例中,获取此次需要执行的SQL语句信息;判定此次执行SQL语句需要动态分区的动态因子,动态修改分区算法,智能生成分区参数;根据智能分区参数,自动动态实现Hive数仓的分区。
数仓层内部的划分不是为了分层而分层,分层是为了解决ETL任务及工作流的组织、数据的流向、读写权限的控制、不同需求的满足等各类问题。当一个大表和小表进行join,大表的join列是分区列,小表的join列不是分区列时,Hive的动态分区剪裁就会收集小表的join列的集合,发送给tez am,am在为大表计算split时,会根据集合的值过滤大表不需要扫描的分区,从而减少数据扫描量,提高sql执行性能,这是采用本实施例方法通过设置动态因子,按省市县行政区域划分分区后查询效率高的依据。本实施例通过改进的Tarjan算法,改变底层分区算法逻辑,过滤大表不需要扫描的分区,从而减少数据扫描量,提高sql执行性能。
在本实施例中,改进后的数据处理逻辑中,输入参数为:当前搜索树的根节点、当前搜索树根节点代表的序号和动态因子。
具体流程包括:
(1)在搜索之前,初始化根节点x的时间戳与追溯值,确定根节点x的关系指向;
其中,追溯值表示从当前节点x作为搜索树的根节点出发,能够访问到的所有节点中时间戳最小的值;
时间戳用来标记每个节点在进行深度优先搜索时被访问的时间顺序。
(2)通过head变量获取与根节点x直接连接的第一个相邻节点的序号;
(3)通过Next变量,迭代获取剩下的与根节点x直接连接的节点的序号;
(4)对每个相邻节点的序号执行Tarjan算法,进行深度优先递归操作,循环依次判断直接相连的节点y的序号i是否被访问过;
(4-1)若当前节点y没有被访问过,且“动态因子”为0,即不需要动态分区,则按原有逻辑继续执行;
(4-2)若当前节点y没有被访问过,且“动态因子”不为0,则代表需要根据动态因子进行动态分区;
(4-3)根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
(5)最后,根据动态因子动态分区后,递归搜索以y为根的子树,计算x的追溯值,直至得到全部x的追溯值,从而得到最小访问时间的目标结果。
在本实施例中,增加智能分区动态因子,根据动态因子进行动态分区,通过递归搜索以y为根的子树,得到的x的追溯值是一组强联通分量,可以直接给出最小访问时间的目标结果,从而提高本分区方法下查询检索得效率。
在本实施例中,原有的数据处理逻辑为:
(1)初始化根节点x的时间戳与追溯值,确定根节点x的关系指向;
(2)通过head变量获取与根节点x直接连接的第一个相邻节点的序号;
(3)通过Next变量,迭代获取剩下的与根节点x直接连接的节点的序号;
(4)对每个相邻节点的序号执行Tarjan算法,进行深度优先递归操作,循环依次判断直接相连的节点y的序号i是否被访问过;
(4-1)若没有被访问过,递归搜索以y为根的子树;
(4-2)若被访问过,则无需继续递归,直接更新Low下标;
(4-3)计算x的追溯值,结束。
在本实施例中,基于改进的Tarjan算法实现Hive数仓的动态分区,将Hive的自动分区技术优化为智能动态分区,更符合业务逻辑和人机操作逻辑,且通过查询智能动态分区后的分区结构,提高查询效率。涉及全国各省份、各地市行政区域性质的大数据智能存储的业务,都可以用此基于改进Tarjan算法的Hive数仓智能分区技术,智能改变Hive分区方式,提高海量数据的存储、检索等操作效率。
实施例2
本实施例提供一种Hive数仓动态智能分区系统,包括:
动态因子指定模块,被配置为根据业务需要,设定Hive数仓动态分区的动态因子;
指令获取模块,被配置为获取数据存储指令;
动态因子确定模块,被配置为根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
分区模块,被配置为根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
此处需要说明的是,上述模块对应于实施例1中所述的步骤,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
在更多实施例中,还提供:
一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例1中所述的方法。为了简洁,在此不再赘述。
应理解,本实施例中,处理器可以是中央处理单元CPU,处理器还可以是其他通用处理器、数字信号处理器DSP、专用集成电路ASIC,现成可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例1中所述的方法。
实施例1中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.一种Hive数仓动态智能分区方法,其特征在于,包括:
根据业务需要,设定Hive数仓动态分区的动态因子;
获取数据存储指令;
根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
2.如权利要求1所述的一种Hive数仓动态智能分区方法,其特征在于,所述动态因子包括四类;其中,动态因子0表示无需分区,动态因子1表示全国业务,动态因子2表示各省份业务,动态因子3表示各地市业务。
3.如权利要求1所述的一种Hive数仓动态智能分区方法,其特征在于,查询业务数据时,接收查询指令,确定所属动态因子,根据动态因子扫描对应的分区,从而完成数据查询。
4.如权利要求1所述的一种Hive数仓动态智能分区方法,其特征在于,扫描分区的过程中,初始化根节点x,获取与根节点x直接连接的节点y,递归搜索以y为根的子树,计算x的追溯值,直至得到全部x的追溯值,从而得到最小访问时间的目标结果。
5.如权利要求4所述的一种Hive数仓动态智能分区方法,其特征在于,根据动态因子进行数据扫描,过滤不需要扫描的分区。
6.如权利要求3所述的一种Hive数仓动态智能分区方法,其特征在于,查询业务数据的过程还包括:
初始化根节点x的时间戳与追溯值,确定根节点x的关系指向;
获取与根节点x直接连接的第一个相邻节点的序号;以及迭代获取剩下的与根节点x直接连接的节点的序号,从而对每个相邻节点的序号执行Tarjan算法,循环依次判断直接相连的节点y的序号i是否被访问过;
根据判断结果,判断是否进行分区以及进行数据搜索。
7.如权利要求6所述的一种Hive数仓动态智能分区方法,其特征在于,
若当前节点y没有被访问过,且动态因子表示无需分区,则按原有逻辑执行;
若当前节点y没有被访问过,且动态因子表示需分区,则根据动态因子进行动态分区;
分区后,递归搜索以y为根的子树,计算x的追溯值,直至得到全部x的追溯值,从而得到最小访问时间的目标结果。
8.一种Hive数仓动态智能分区系统,其特征在于,包括:
动态因子指定模块,被配置为根据业务需要,设定Hive数仓动态分区的动态因子;
指令获取模块,被配置为获取数据存储指令;
动态因子确定模块,被配置为根据数据存储指令中待执行的SQL语句信息,判定执行SQL语句所需的动态因子;
分区模块,被配置为根据确定的动态因子划分存储分区,并将对应的业务数据存储至对应的分区中,动态完成Hive数仓的分区。
9.一种电子设备,其特征在于,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机指令,所述计算机指令被处理器执行时,完成权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211594936.2A CN115858589A (zh) | 2022-12-13 | 2022-12-13 | 一种Hive数仓动态智能分区方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211594936.2A CN115858589A (zh) | 2022-12-13 | 2022-12-13 | 一种Hive数仓动态智能分区方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115858589A true CN115858589A (zh) | 2023-03-28 |
Family
ID=85672332
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211594936.2A Pending CN115858589A (zh) | 2022-12-13 | 2022-12-13 | 一种Hive数仓动态智能分区方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115858589A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116226894A (zh) * | 2023-05-10 | 2023-06-06 | 杭州比智科技有限公司 | 一种基于元仓的数据安全治理系统及方法 |
-
2022
- 2022-12-13 CN CN202211594936.2A patent/CN115858589A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116226894A (zh) * | 2023-05-10 | 2023-06-06 | 杭州比智科技有限公司 | 一种基于元仓的数据安全治理系统及方法 |
CN116226894B (zh) * | 2023-05-10 | 2023-08-04 | 杭州比智科技有限公司 | 一种基于元仓的数据安全治理系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108256088A (zh) | 一种基于键值数据库的时序数据的存储方法及系统 | |
US9141666B2 (en) | Incremental maintenance of range-partitioned statistics for query optimization | |
CN109255055A (zh) | 一种基于分组关联表的图数据存取方法和装置 | |
CN105069134A (zh) | 一种Oracle统计信息自动收集方法 | |
CN108804602A (zh) | 一种基于spark的分布式空间数据存储计算方法 | |
CN109344153A (zh) | 业务数据的处理方法及终端设备 | |
CN111552694B (zh) | 一种自适应地理空间网格索引方法 | |
US20060004715A1 (en) | Indexing stored data | |
CN110147377A (zh) | 大规模空间数据环境下基于二级索引的通用查询算法 | |
CN105677683A (zh) | 批量数据查询方法和装置 | |
CN102063490A (zh) | 一种数据库分区方法和分区装置 | |
CN110175175A (zh) | 一种基于spark的分布式空间二级索引与范围查询算法 | |
CN105608228B (zh) | 一种高效的分布式的rdf数据存储方法 | |
CN102110102A (zh) | 数据处理方法及装置、文件识别方法及工具 | |
CN115858589A (zh) | 一种Hive数仓动态智能分区方法及系统 | |
CN110046176A (zh) | 一种基于Spark的大规模分布式DataFrame的查询方法 | |
US6006219A (en) | Method of and special purpose computer for utilizing an index of a relational data base table | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN109189343B (zh) | 一种元数据落盘方法、装置、设备及计算机可读存储介质 | |
CN108717448B (zh) | 一种面向键值对存储的范围查询过滤方法和键值对存储系统 | |
CN112445776B (zh) | 基于Presto的动态分桶方法、系统、设备及可读存储介质 | |
CN107894997B (zh) | 工业时序数据的查询处理方法及系统 | |
CN112650819A (zh) | 元数据立方体的构建方法、装置、设备和存储介质 | |
CN110232063B (zh) | 层级数据查询方法、装置、计算机设备和存储介质 | |
CN108345603A (zh) | 一种sql语句解析方法及装置 |
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 |