CN115328865A - 一种csv文件的批量导入方法和相关设备 - Google Patents
一种csv文件的批量导入方法和相关设备 Download PDFInfo
- Publication number
- CN115328865A CN115328865A CN202210771645.XA CN202210771645A CN115328865A CN 115328865 A CN115328865 A CN 115328865A CN 202210771645 A CN202210771645 A CN 202210771645A CN 115328865 A CN115328865 A CN 115328865A
- Authority
- CN
- China
- Prior art keywords
- csv
- target
- file
- node
- csv file
- 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
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/10—File systems; File servers
- G06F16/17—Details of further file system functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种CSV文件的批量导入方法和相关设备,方法包括:获取待导入的若干个CSV文件的文件信息;根据所述文件信息,确定每一个所述CSV文件对应的目标节点;以及,根据所述文件信息,对所述CSV文件进行分组,得到若干个计划列表;根据预设的遍历终止规则,针对每一个所述计划列表,循环遍历该计划列表中的CSV文件,并当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表。本发明能够极大地提高将CSV文件批量导入数据库的速率。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种CSV文件的批量导入方法和相关设备。
背景技术
当在数据库上应用布局部分新项目时,待分析的数据集是分布于不同的节点上的,待分析数据集所在的节点可能存在老旧、异构、冷门等问题,而待分析数据的数据量也可能较大,因此为了方便获取待分析数据集,管理者一般采用批量导出CSV文件的方式。与之相对,项目实施时,需要将批量导出的CSV文件导入至数据库中。
在较高性能的物理服务器集群上,例如MPP类型的数据库,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。在将CSV文件导入数据库中,需要先读取并解析CSV数据文件,然后将CSV数据文件组装插入到SQL语句中,最后在发送到项目实施的数据库中。在这种服务器集群上进行CSV文件的读取和插入是串行的,因此对磁盘的IO、多核CPU、网络等硬件资源的利用率较低,且数据量巨大时,在前期的组装插入SQL语句、解析SQL语句都需要消耗较长的时间,因此这种批量插入CSV的方式效率较低。
发明内容
本发明要解决的技术问题在于目前批量插入CSV文件的方式效率低下,针对现有技术的不足,提供一种CSV文件的批量导入方法和相关设备。
为了解决上述技术问题,本发明所采用的技术方案如下:
一种CSV文件的批量导入方法,所述方法包括:
获取待导入的若干个CSV文件的文件信息;
根据所述文件信息,确定每一个所述CSV文件对应的目标节点;以及,
根据所述文件信息,对所述CSV文件进行分组,得到若干个计划列表;
根据预设的遍历终止规则,针对每一个所述计划列表,循环遍历该计划列表中的CSV文件,并当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表。
所述CSV文件的批量导入方法,其中,所述文件信息包括每一个所述CSV文件的文件大小,所述根据所述文件信息,确定每一个所述CSV文件对应的目标节点包括:
根据所述文件大小,对所述CSV文件进行排序,得到文件序列表;
根据所述文件序列表,按照从大到小的顺序,依次确定每一个所述CSV文件对应的目标节点。
所述CSV文件的批量导入方法,其中,所述文件信息包括各个节点的磁盘空间,所述根据所述文件信息,确定每一个所述CSV文件对应的目标节点包括:
针对每一个所述CSV文件,根据所述磁盘空间,确定所述节点中的候选节点;
针对每一个所述候选节点,根据该候选节点的磁盘空间和与该候选节点对应的CSV文件的大小,计算该候选节点对应的剩余空间;
根据所述剩余空间,确定该CSV文件对应的目标节点,并对所述目标节点对应的磁盘空间进行更新。
所述CSV文件的批量导入方法,其中,所述当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点包括:
当遍历一个所述CSV文件时,基于预设的资源池,获取与该CSV文件对应的发送资源,其中,所述资源池包括每一个所述目标节点对应的发送资源;
当获取成功时,基于所述发送资源,将该CSV文件发送至所述目标节点;
当检测到针对所述CSV文件的发送成功指令时,将所述发送资源返回至所述资源池。
所述CSV文件的批量导入方法,其中,所述当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表包括:
为每一个所述目标节点设置若干个临时表;
循环将所述CSV文件导入至预设的初始表中,直至检测到发送终止指令,得到目标表,其中,所述循环将所述CSV文件导入至预设的初始表中包括:
依次将所述CSV文件导入至所述临时表中,直至所述临时表中的CSV文件的数量等于预设的数据阈值,其中,每一个所述目标节点设有若干个临时表;
将所述临时表中的CSV文件导入至所述初始表。
所述CSV文件的批量导入方法,其中,所述当检测到发送结束指令时,针对每一个所述目标节点,根据与该目标节点对应的加载队列,生成与该目标节点对应的目标表之后,还包括:
根据预设的重分布规则,确定所述目标表中的重分布表;
对该重分布表对应的目标节点进行节点扩容,得到扩容节点,并创建与所述扩容节点对应的中转表;
对所述重分布表中的数据进行重分布,得到重分布数据,并将所述重分布数据导入所述中转表,得到与每一个所述扩容节点对应的更新表。
所述CSV文件的批量导入方法,其中,所述根据预设的重分布规则,确定所述目标表中的重分布表包括:
当所述目标表为非哈希表时,根据预设的确定规则和所述目标表的数据量,确定所有所述目标表中的重分布表;
当所述目标表为哈希表时,确定所有所述目标表为重分布表。
所述CSV文件的批量导入方法,其中,所述根据预设的确定规则和所述目标表的数据量,确定所有所述目标表中的重分布表包括:
根据所有所述目标表的数据量,计算平均数据量;
计算预设的倍数和所述平均数据量的乘积,得到所述目标表对应的数据量阈值;
针对每一个所述目标表,当该目标表的数据量大于所述数据量阈值时,确定该目标表为重分布表。
一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任一所述的CSV文件的批量导入方法中的步骤。
一种终端设备,其包括:处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;
所述通信总线实现处理器和存储器之间的连接通信;
所述处理器执行所述计算机可读程序时实现如上任一所述的CSV文件的批量导入方法中的步骤。
有益效果:本发明提供一种CSV文件的批量导入方法和相关设备,在该方法中,首先获取待导入的CSV文件,然后根据CSV文件的文件信息,确定后续要将该CSV文件发送的目标节点,同时,对CSV文件进行分组,得到若干个计划列表。之后以计划列表为单位,分发每一个计划列表中的CSV文件,并且每分发一个就记录至加载队列中,直至全部分发完成。在目标节点方面,当计划列表的内容分发完成后,将该目标节点对应的加载队列进行合并,生成目标表。在该方法中,CSV文件拆分多个计划列表进行分发,在同一时间可存在多个CSV文件发送至目标节点,因此提高分发的效率。
附图说明
图1为本发明提供的CSV文件的批量导入方法的流程图。
图2为本发明提供的CSV文件的批量导入方法的整体流程图。
图3为本发明提供的CSV文件的批量导入方法中目标节点进行CSV文件导入的流程图。
图4为本发明提供的CSV文件的批量导入方法中目标节点导入CSV文件的流程图。
图5为本发明提供的CSV文件的批量导入方法中重分布的示意图。
图6为本发明提供的CSV文件的批量导入方法中重分布时主从节点的处理示意图。
图7为本发明提供的终端设备的结构原理图。
具体实施方式
本发明提供一种CSV文件的批量导入方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
如图1和图2所示,本实施提供了一种CSV文件的批量导入方法,为方便说明,以常见的服务器作为执行主体进行描述,此处的服务器可替换为平板、电脑等具有数据处理功能的设备,CSV文件的批量导入方法包括以下步骤:
S10、获取待导入的若干个CSV文件的文件信息。
具体地,在物理服务器集群上,通常多个服务器或节点都分布有数据和任务,在每个节点的计算结构汇总后得到最终的结果。
首先获取需要导入的CSV文件的文件信息,文件信息是指该CSV文件的大小、原有的存储路径,例如源主机、源路径,以及其他与CSV文件的属性有关的信息。
S20a、根据所述文件信息,确定每一个所述CSV文件对应的目标节点。
具体地,得到文件信息后,可确定CSV文件对应的目标节点。
在一种实现方式中,采用随机分配的方式确定CSV文件对应的目标节点。例如目标节点的剩余空间为100M,因此选择总大小于100M的待导入的CSV文件。这种确定方式非常随机,很容易导致目标节点之间的数据分布不均匀。
在第二种实现方式中,先规划较大的CSV文件,再规划较小的CSV文件,以使得目标节点之间的数据分布均匀。首先根据CSV文件的文件大小,对CSV文件进行排序,得到文件序列表。在文件序列表中,可按照从大到小的顺序排列,也可按照从小到大的顺序排列。然后以文件序列表为依据,按照从大到小的顺序,依次确定每一个CSV文件对应的目标节点。通过这种按照从大到小的顺序进行规划,能够提高数据分布的均匀性。
但是目标节点的磁盘空间并不相同,且在安排对应的CSV文件后,实际能用于存储的空间有限,因此,在第三种实现方式中,采用以下方式确定每一个CSV文件对应的目标节点:
A10、针对每一个所述CSV文件,根据所述磁盘空间,确定所述节点中的候选节点。
具体地,首先根据每一个节点的磁盘空间,确定这些节点中的候选节点。候选节点是指在规划的容量上能够满足CSV文件存储的候选节点。
值得注意的是,这里的磁盘空间不仅包括节点当前的初始空间值,还可包括按照规划计算的理论消耗值。在还未确定CSV文件对应的目标节点时,理论消耗值为0。
例如数据库中存在节点A和节点B,在还未确定目标节点时,节点A的初始空间值为40M,理论空间值为0M,节点B的初始空间值为50M,理论消耗值为0M。在确定两个CSV文件对应的目标节点后,节点A和节点B的初始空间值不变,但节点A的理论消耗值仍为0M,节点B的理论消耗值为20M。也就意味着,在后续分配CSV文件时,在该CSV文件被分发之前,前面两个CSV文件会占据节点B的20M,实际能够分配给该CSV文件的理论剩余空间只有30M(50M-20M=30M)。
因此,先根据每一个节点的磁盘空间,选择能够存储该CSV文件的节点作为候选节点。
A20、针对每一个所述候选节点,根据该候选节点的磁盘空间和与该候选节点对应的CSV文件的大小,计算该候选节点对应的剩余空间。
具体地,例如该CSV文件的大小为1M,节点A和节点B都为候选节点,节点A对应的剩余空间即为39M(40–1=39M),节点B对应的剩余空间即为29M(30–1=29M)。
A30、根据所述剩余空间,确定该CSV文件对应的目标节点,并对所述目标节点对应的磁盘空间进行更新
具体地,最后根据剩余空间,选择剩余空间最大的节点,作为该CSV文件对应的目标节点。同时,该目标节点对应的磁盘空间也需要进行更新,例如节点A对应的磁盘空间中理论消耗值就更新为1M。
进一步地,在确定候选节点的过程中,可直接选择理论剩余空间大于该CSV文件的节点作为候选节点。但是如果CSV文件过小,则候选节点的数量较多,后续计算剩余空间的数量较多,会延长计算时间,因此,在本实施例中,预先设定空间倍值,空间倍值是指理论剩余空间要大于CSV文件的倍数。例如预设的空间倍值为2,CSV文件为4M,则将理论剩余空间大于8M(2x 4=8M)的节点作为候选节点。
此外,为提高处理效率,服务器中长处设置主节点和从节点的结构,若该CSV文件需要导入主从节点,例如其—duplicate参数值为MASTER_SLAVE,则主节点和从节点的理论剩余空间都会与CSV文件的大小进行比较,以保证主从节点都能够在后续过程中被导入。
进一步地,上述方式可进行组合,以提高确定目标节点的效果。例如实现方式二和实现方式三进行组合,先根据文件大小,对所述CSV文件进行排序,得到文件序列表,根据所述文件序列表,按照从大到小的顺序,依次选取CSV文件。针对选取的CSV文件,根据所述磁盘空间,确定所述节点中的候选节点,并针对每一个所述候选节点,根据该候选节点的磁盘空间和与该候选节点对应的CSV文件的大小,计算该候选节点对应的剩余空间。最后,根据所述剩余空间,确定该CSV文件对应的目标节点,并对所述目标节点对应的磁盘空间进行更新。
值得注意的是,若CSV文件的文件编码是utf8-bom,则把该文件导入计划的开始发送偏移量记为3,否则记为0。数据节点快速导入不支持编码为utf8-bom的CSV文件,而相同内容不同编码的两文件,区别仅仅只是utf8-bom编码相比utf8编码多出了固定的前三个字节作为标签;本方案在发送文件时从第四字节开始发送utf8-bom编码的文件就能很好地解决这一问题。
S20b、根据所述文件信息,对所述CSV文件进行分组,得到若干个计划列表。
具体地,为了能够并行发送多个CSV文件,得到文件信息后,还对CSV文件进行分组,并将每一个组都作为一个计划列表。该计划列表就是后续进行CSV文件分发的依据,每一个计划列表中包含有若干个CSV文件。
进一步地,分组可依据多种参数进行,例如CSV文件的大小、CSV文件的存储路径。若采用根据CSV文件的存储路径进行拆分,则在后续进行发送时,针对该计划列表的发送访问的地址统一,能够提高发送效率,因此在本实施例中,优选采用根据CSV文件的存储路径,例如源主机、源路径、源主机和源路径的组合等方式,对CSV文件进行分组。
S30、根据预设的遍历终止规则,针对每一个所述计划列表,循环遍历该计划列表中的CSV文件,并当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表。
具体地,预先设置一个遍历终止规则,该遍历终止规则用于限定后续的遍历何时终止。由于本方案是要将所有的CSV文件导入到数据库中,因此可设定遍历终止规则中包括,当计划列表中的CSV文件全都被发送,则停止遍历。此外,当遍历过程中文件发送等环节出现错误,也可终止遍历。
得到计划列表后,以计划列表中的任意一个CSV文件为起点进行循环遍历,一般以接话列表中的表首,即第一行的CSV文件作为起点。每遍历到一个CSV文件,由于之前已经确定CSV文件对应的目标节点,因此可将该CSV文件发送至目标节点。如图3所示,为了更好地实现针对每一个计划列表的循环遍历,可选择为每一个计划列表设置一个发送线程,该发送线程专用于遍历、发送以及导入CSV文件。
将所有的计划列表中的CSV文件导入至对应的目标节点后,目标节点根据导入的目标节点,即可生成与批量导入的CSV文件对应的目标表。
进一步地,由于对CSV文件的发送是多个计划列表同时进行,而存在多个计划列表的导入,可能出现某一些目标节点同时需要接收来自多个不同的计划列表的CSV文件,而某一些目标节点可能一时之间没有接收CSV文件,因此为了避免出现这种情况,在进行分发之前预先设定一个资源池,该资源池设有用于将CSV文件发送到目标节点所需要调用的发送资源,例如CPU。基于资源池的发送方法包括以下步骤:
B10、当遍历一个所述CSV文件时,基于预设的资源池,获取与该CSV文件对应的发送资源。
具体地,当遍历到一个CSV文件时,由于事先已经确定了该CSV文件对应的目标节点,因此,可从资源池中获取用于发送该CSV文件至目标节点的发送资源。在资源池中可设置多个发送资源,例如针对CSV文件1,其对应的目标节点为节点A,节点A对应的发送资源的数量设置为2,因此最多同时两个CSV文件同时发送至节点A。
B20、当获取成功时,基于所述发送资源,将该CSV文件发送至所述目标节点。
具体地,当获取成功时,则说明当前发送到节点A的CSV文件的数量为0或1,节点A还并未拥挤,因此,基于发送资源将该CSV文件发送至目标节点。
进一步地,若获取失败,则说明当前发送到节点A的CSV文件的数量为2,已经达到了设定的同时发送至节点A的文件数量的上限,因此停止发送该CSV文件。此时,以发送线程为例,可预先设定一个第一等待阈值,例如10ms,即10ms后,发送线程会重新尝试在资源池中获取该目标节点对应的发送资源。此外,发送线程也可选择暂时不发送CSV文件1,而是选择在计划列表中位与CSV文件1的下一位CSV文件,并尝试在资源池中获取下一位CSV文件对应的发送资源。若下一位CSV文件,例如CSV文件2,对应的发送资源获取成功,则继发送CSV文件2,并尝试获取CSV文件2的下一位CSV文件,例如CSV文件3,直至整个计划列表遍历结束,重新回到CSV文件1。
B30、当检测到针对所述CSV文件的发送成功指令时,将所述发送资源返回至所述资源池。
具体地,发送线程发送了CSV文件后,若该CSV文件成功发送到目标节点,则会生成针对该CSV文件的发送成功指令,以让发送线程发送下一个CSV文件。在检测到发送成功指令时,由于前后两个CSV文件对应的目标节点可能不同,因此前一个CSV文件对应的目标节点会空闲,因此发送线程还需要将发送资源返回至资源池中,以方便其他计划列表对应的发送线程使用。
此外,为了避免重复,发送线程此时可将该CSV文件从计划列表中删除。若CSV文件发送失败,例如在预设的检测时间内未检测到发送成功指令,则发送线程可选择重新发送,或者先发送该CSV文件的下一位CSV文件,在后续循环遍历时再进行重试。
通过上述设置资源池的方式,可使得不同的目标节点之间同时处理的CSV文件较为均一,不会出现过于拥挤的目标节点,也不会出现一时没有需要接收CSV文件的目标节点,也提高了资源的分配效率,提高批量导入的速度。
另一方面,由于存在多个计划列表,而对于某一个目标节点而言,可能同时面临多个CSV文件的导入,此时较容易发送导入出错的情形。因此为了减少导入过程中错误的产生,保证数据的准确性,本实施例中,将CSV文件发送至目标节点过程中,包括循环将所述CSV文件导入至预设的初始表中,直至检测到发送终止指令,得到目标表。其中,循环将所述CSV文件导入至预设的初始表中包括:
C10、依次将所述CSV文件导入至所述临时表中,直至所述临时表中的CSV文件的数量等于预设的数据阈值。
具体地,为了方便CSV文件导入到临时表中,一般会设有一个加载队列,以顺序加载需要导入CSV文件至加载队列中。因此本实施例采用加载队列的方式作为导入临时表的基础。目标节点每接收一个CSV文件,该CSV文件都会插入到加载队列中。如图4所示,还可设置合并线程,以方便执行任务。
针对每一个临时表,先将加载队列中的CSV文件插入该临时表中。由于加载队列是按照时间的先后顺序插入数据的,因此从目标节点对应的加载队列中获取首条信息。若获取成功,则执行数据导入,将所述加载队列中的CSV文件导入至临时表中,并将加载队列中的数据删除,以避免重复导入。
预先设定数量阈值,该数量阈值用于限定位与临时表中的数据的数量,以避免临时表累积过多CSV文件。
C20、将所述临时表中的CSV文件导入至预设的初始表。
具体地,如图5所示,当临时表中的CSV文件数量达到数量阈值时,将该临时表中的CSV文件导入至预设的初始表中。预先设定的初始表是一个空表,而随着临时表中的CSV文件的不断导入,逐渐增加初始表中的CSV文件的数量,直至加载队列中全部的CSV文件都导入至初始表中,得到目标表。
临时表中的数据导入至初始表中后,可将这个临时表删除,再创建一个新的临时表,继续导入加载队列中的CSV文件,或者将临时表中的数据删除,直接再将加载队列中的全部CSV文件导入至该临时表中。
进一步地,在将临时表的数据导入到初始表中时,若同时导入临时表的数量过多,也容易引起存储错误,因此在本实施例中,在将临时表中的CSV文件导入初始表之前,预先设置一个合并规则。合并规则中可规定该临时表此时能否将CSV文件导入至初始表。例如在合并规则中规定,一次只能导入一个临时表的CSV文件、等待导入的临时表的数量大于预设的第一等待阈值时,继续将该CSV文件导入该临时表中等等。以下为分别举例说明。
当合并规则中规定一次仅导入一个临时表时,检测目标节点是否处于导入状态,若处于导入状态,则说明有临时表正在初始表中导入数据。此时可选择让该临时表等待前一个临时表导入完成,或者继续向临时表导入CSV文件。
第一等待阈值是指等待导入初始表的临时表的数量,若当前等待导入初始表的临时表的数量过多时,继续等待会降低整体的导入效率,因此可在合并规则中设定第一等待阈值,当等待导入的临时表的数量大于第一等待阈值时,则向后续达到数量阈值的临时表继续导入CSV文件。其中,第一等待阈值可以为设置的临时表的总数的一半。
此外,若存在多个临时表在等待加载队列导入CSV文件,则可选择将部分在等待的临时表先进行CSV文件的导入。例如,预先设定第二等待阈值,该第二等待阈值用于限制等待加载队列导入CSV文件的临时表的数量。例如第二等待阈值为2,当已存在两个临时列表处于等到加载队列时,若第三个临时表中存在CSV文件,则优选将第三个临时表中的CSV文件导入初始表中;若第三个临时表中不存在CSV文件,则很可能设置的临时表的数量过多,可选择将第三个临时表删除。
进一步地,在生成目标表之后,由于之前确定CSV文件对应的目标节点是通过CSV文件的大小确定的,在数量分布上可能并不均匀,例如某一个目标节点中CSV文件的数量远大于另一个目标节点的CSV文件的数量。
因此为了平衡每一个目标节点的CSV文件的数量,在所有的CSV文件导入后,需要对目标节点上的CSV文件进行重分布。预先设置一个重分布规则,该重分布规则用于确定目标表中需要重分布的表,即重分布表。
同时,对该重分布表的目标节点进行节点扩容,从而得到扩容节点。并且创建与该扩容节点对应的中转表。中转表可通过“creat like”创建。最后,对重分布表中的数据进行重分布,得到若干个重分布数据,并将重分布数据导入到中转表中,得到与每一个所述扩容节点对应的更新表。在数据重分布过程中,可采用redis构建用于重分布的命令指令。
此外,如果目标表时分区表,由于分区表和非分区表支持的语句不通,因此针对目标表是否为分区表,可采用不通的语句则在redis语句中添加不同的选项,以得到用于重分布的命令语句。以天云星数据库为例,如果目标表是分区表,则redis语句中可添加use rdc选项;若否,则添加use file选项。
此外,如果该重分布表所对应的目标节点—duplicate值为MASTER_SLAVE,在进行重分布时,需要对主从节点都进行处理,此时主节点或从节点的备份性质都可能会影响到重分布的进行。因此在本实施例中,可采用以下方式实现主从节点的重分布。
如图6所示首先设置从节点为执行对象,例如“set slave”,然后采用“stopbackup”,以防止后续操作在主从节点之间进行备份,在不更改执行对象之前,只有从节点会根据命令进行操作,主节点不会发生数据变化。
然后将从节点中与目标表对应的备份表都进行删除,例如备份表的表名为“目标表_slave”或“目标表”,则将这两个表都删除,代码语句可为“drop table if exists目标表表名_slave,目标表表名”。
再设置主节点为执行对象,根据目标节点的表名和更新表,生成用于存储于从节点的从节点表。仍以上述从节点的目标表表名为“目标表表名_slave”为例,可采用“save‘目标表’as‘目标表_slave’slave”,得到用于存储在从节点的目标表。
然后再设置从节点为执行对象,将从节点表保存至从节点,此时的可采用语句“alter table目标表_slave rename as目标表”,从而将主节点的更新表保存至从节点。
进一步地,数据库的节点的目标表可采用非哈希表或哈希表两种方式,针对这两种不同的表格类型,当所述目标表为哈希表时,确定所有所述目标表为重分布表;当所述目标表为非哈希表时,根据预设的确定规则和所述目标表的数据量,确定所有所述目标表中的重分布表。确定规则是指用于确定非哈希表中重分布表的规则,该规则主要基于目标表的数据量确定是否为重分布表。
此外,如图5所示,确定了重分布表后,由于对目标节点的重分布需要重新创建表,因此,预先设置一个队列规则,该队列规则用于为确定后续创建的表的列值,以保证数据的唯一性。例如当重分布表为哈希表时,使用哈希表的属性值或其他特殊值作为中转表的列值;当重分布表为非哈希表时,可采用按照一定的选取规则,对重分布表中的每一行进行字段提取,得到列值。选取规则可自由设定,例如选取每一行的第一、第二以及中间的两位字段作为列值。
本实施例提供一种确定规则,首先根据所有目标表的数据量,计算平均数量。例如目标表1的数据量,也就是CSV文件的数量,为60,目标表2的数据量为50,目标表3的数据量为40,平均数量为50。在确定规则中设置有倍数,该倍数用于评价目标表之间的倍数差,例如预先设定的倍数为2倍,计算倍数与平均数据量的乘积,得到数据量阈值。最后针对每一个目标表,比较该目标表的数据量与数据量阈值之间的大小关系。若数据量大于数据量阈值,则确定目标表为重分布表。
例如前例中,在倍数为2的情况下,数据量阈值为100,没有一个目标表的数据量大于数据量阈值,因此这些目标表中不存在重分布表,也就不需要再进行后续的重分布。再例如,若目标表1的数据量为10,目标表2的数据量为70,目标表3为10,倍数为2,数据量阈值为60,目标表2的数据量超过数据量阈值,因此目标表2为重分布表。
基于上述CSV文件的批量导入方法,本发明还提供了一种终端设备,如图7所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(Communications Interface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑命令,以执行上述实施例中的方法。
此外,上述的存储器22中的逻辑命令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。
存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序命令或模块。处理器20通过运行存储在存储器22中的软件程序、命令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。
存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态计算机可读存储介质。
此外,上述计算机可读存储介质以及终端设备中的多条命令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种CSV文件的批量导入方法,其特征在于,所述方法包括:
获取待导入的若干个CSV文件的文件信息;
根据所述文件信息,确定每一个所述CSV文件对应的目标节点;以及,
根据所述文件信息,对所述CSV文件进行分组,得到若干个计划列表;
根据预设的遍历终止规则,针对每一个所述计划列表,循环遍历该计划列表中的CSV文件,并当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表。
2.根据权利要求1所述CSV文件的批量导入方法,其特征在于,所述文件信息包括每一个所述CSV文件的文件大小,所述根据所述文件信息,确定每一个所述CSV文件对应的目标节点包括:
根据所述文件大小,对所述CSV文件进行排序,得到文件序列表;
根据所述文件序列表,按照从大到小的顺序,依次确定每一个所述CSV文件对应的目标节点。
3.根据权利要求1或2所述CSV文件的批量导入方法,其特征在于,所述文件信息包括各个节点的磁盘空间,所述根据所述文件信息,确定每一个所述CSV文件对应的目标节点包括:
针对每一个所述CSV文件,根据所述磁盘空间,确定所述节点中的候选节点;
针对每一个所述候选节点,根据该候选节点的磁盘空间和与该候选节点对应的CSV文件的大小,计算该候选节点对应的剩余空间;
根据所述剩余空间,确定该CSV文件对应的目标节点,并对所述目标节点对应的磁盘空间进行更新。
4.根据权利要求1所述CSV文件的批量导入方法,其特征在于,所述当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点包括:
当遍历一个所述CSV文件时,基于预设的资源池,获取与该CSV文件对应的发送资源,其中,所述资源池包括每一个所述目标节点对应的发送资源;
当获取成功时,基于所述发送资源,将该CSV文件发送至所述目标节点;
当检测到针对所述CSV文件的发送成功指令时,将所述发送资源返回至所述资源池。
5.根据权利要求1、3或4中任意一项所述CSV文件的批量导入方法,其特征在于,所述当遍历一个所述CSV文件时,将该CSV文件发送至对应的目标节点,直至遍历结束,得到与所述CSV文件对应的目标表包括:
为每一个所述目标节点设置若干个临时表;
循环将所述CSV文件导入至预设的初始表中,直至检测到发送终止指令,得到目标表,其中,所述循环将所述CSV文件导入至预设的初始表中包括:
依次将所述CSV文件导入至所述临时表中,直至所述临时表中的CSV文件的数量等于预设的数据阈值,其中,每一个所述目标节点设有若干个临时表;
将所述临时表中的CSV文件导入至所述初始表。
6.根据权利要求1所述CSV文件的批量导入方法,其特征在于,所述当检测到发送结束指令时,针对每一个所述目标节点,根据与该目标节点对应的加载队列,生成与该目标节点对应的目标表之后,还包括:
根据预设的重分布规则,确定所述目标表中的重分布表;
对该重分布表对应的目标节点进行节点扩容,得到扩容节点,并创建与所述扩容节点对应的中转表;
对所述重分布表中的数据进行重分布,得到重分布数据,并将所述重分布数据导入所述中转表,得到与每一个所述扩容节点对应的更新表。
7.根据权利要求6所述CSV文件的批量导入方法,其特征在于,所述根据预设的重分布规则,确定所述目标表中的重分布表包括:
当所述目标表为非哈希表时,根据预设的确定规则和所述目标表的数据量,确定所有所述目标表中的重分布表;
当所述目标表为哈希表时,确定所有所述目标表为重分布表。
8.根据权利要求7所述CSV文件的批量导入方法,其特征在于,所述根据预设的确定规则和所述目标表的数据量,确定所有所述目标表中的重分布表包括:
根据所有所述目标表的数据量,计算平均数据量;
计算预设的倍数和所述平均数据量的乘积,得到所述目标表对应的数据量阈值;
针对每一个所述目标表,当该目标表的数据量大于所述数据量阈值时,确定该目标表为重分布表。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1~8任意一项所述的CSV文件的批量导入方法中的步骤。
10.一种终端设备,其特征在于,包括:处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;
所述通信总线实现处理器和存储器之间的连接通信;
所述处理器执行所述计算机可读程序时实现如权利要求1~8任意一项所述的CSV文件的批量导入方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210771645.XA CN115328865A (zh) | 2022-06-30 | 2022-06-30 | 一种csv文件的批量导入方法和相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210771645.XA CN115328865A (zh) | 2022-06-30 | 2022-06-30 | 一种csv文件的批量导入方法和相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115328865A true CN115328865A (zh) | 2022-11-11 |
Family
ID=83917426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210771645.XA Pending CN115328865A (zh) | 2022-06-30 | 2022-06-30 | 一种csv文件的批量导入方法和相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115328865A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115544027A (zh) * | 2022-12-05 | 2022-12-30 | 北京滴普科技有限公司 | 一种面向olap分析引擎的数据导入方法和系统 |
-
2022
- 2022-06-30 CN CN202210771645.XA patent/CN115328865A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115544027A (zh) * | 2022-12-05 | 2022-12-30 | 北京滴普科技有限公司 | 一种面向olap分析引擎的数据导入方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8214356B1 (en) | Apparatus for elastic database processing with heterogeneous data | |
US10747453B2 (en) | Method and apparatus for bottleneck identification in high-performance storage systems | |
US11921725B2 (en) | Processing queries based on rebuilding portions of virtual segments | |
US10452655B2 (en) | In-memory cursor duration temp tables | |
US9235590B1 (en) | Selective data compression in a database system | |
US20160253402A1 (en) | Adaptive data repartitioning and adaptive data replication | |
US10127281B2 (en) | Dynamic hash table size estimation during database aggregation processing | |
US11836132B2 (en) | Managing persistent database result sets | |
CN109918450B (zh) | 基于分析类场景下的分布式并行数据库及存储方法 | |
CN110058940B (zh) | 一种多线程环境下的数据处理方法及装置 | |
CN111930716A (zh) | 一种数据库扩容方法、装置及系统 | |
CN116185308B (zh) | 一种数据集处理方法、装置、设备、介质及模型训练系统 | |
US10747773B2 (en) | Database management system, computer, and database management method | |
CN115328865A (zh) | 一种csv文件的批量导入方法和相关设备 | |
CN115525631A (zh) | 数据库数据迁移方法、装置、设备、存储介质 | |
CN115039091A (zh) | 多键值命令的处理方法、装置、电子设备及存储介质 | |
CN101783814A (zh) | 海量存储系统的元数据存储方法 | |
CN116662019B (zh) | 请求的分配方法、装置、存储介质及电子装置 | |
US10824640B1 (en) | Framework for scheduling concurrent replication cycles | |
CN114625474A (zh) | 容器迁移方法、装置、电子设备及存储介质 | |
CN113950145B (zh) | 数据处理方法及装置 | |
CN115952005B (zh) | 一种元数据负载均衡方法、装置、设备及可读存储介质 | |
US11550793B1 (en) | Systems and methods for spilling data for hash joins | |
US9330152B2 (en) | Grid loader process | |
US20240037029A1 (en) | Client allocation of memory across memory servers |
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 |