数据表的转换方法、装置、设备及存储介质与流程

文档序号:31338916发布日期:2022-08-31 09:34阅读:55来源:国知局
1.本发明涉及数据处理
技术领域
:,尤其涉及一种数据表的转换方法、装置、设备及存储介质。
背景技术
::2.目前,数据库中录入的数据表,由于存在不同录入数据的规范,有一些数据表的记录中会存在包含多列信息的字符串的情况,这种字符串的多列信息之间以分隔符为分隔,在后期需要对这种数据表中存储的数据内容名进行测3.试运算时,测试程序是没法直接拆分识别这种字符串的然后进行运算测试的,因此,需要对这种数据表记录中的内容进行转换,常规实现记录中内容拆分的一种方法是使用游标逐行进行行拆分,再将拆分结果批量插入目标表,而使用游标对记录中的内容进行拆分的方式不支持动态的表名与字段名,运用不够灵活。4.因此,现有技术还有待于改进和发展。技术实现要素:5.本发明的主要目的在于解决现有数据表的转换方法步骤繁琐,实现不便的技术问题。6.本发明第一方面提供了一种数据表的转换方法,包括:7.构造用于基于分隔符对字符串进行拆分的第一用户自定义函数;8.构造用于统计所述字符串拆分后得到的子字符串的数量的第二用户自定义函数;9.遍历源数据表中的每条记录,确定所述源数据表中的需拆分列;10.利用所述第一用户自定义函数对所述需要拆分列中每条记录的字符串进行拆分,以及通过所述第二用户自定义函数对所述字符串拆分后得到的子字符串的数量进行统计;11.对于所述需要拆分列中的每条记录,若所述记录的字符串需要被拆分成n个子字符串,则在所述记录的下方复制n-1个所述记录,且n-1个所述记录各占一行;12.在所述需要拆分列的所有所述记录都复制过后,在所述需要拆分列的左侧或右侧插入新增列;13.将各个所述记录的所述字符串拆分后得到所述子字符串按照拆分顺序填入所述新增列的每行中,从而得到目标表。14.在本发明第一方面一种可选的实施方式中,所述遍历源数据表中的每条记录,确定所述源数据表中的需拆分列包括:15.遍历源数据表中的每条记录;16.读取每条所述记录中的字符串;17.判断所述字符串中是否存在有分隔符;18.若所述字符串中存在有分隔符,则判定所述记录所在的列为需拆分列。19.在本发明第一方面一种可选的实施方式中,所述利用所述第一用户自定义函数对所述需要拆分列中每条记录的字符串进行拆分包括:20.对于所述需拆分列,按照从上到下的顺序读取每条所述记录的字符串;21.对于每条所述记录的字符串,按照从左到右的顺序识别所述字符串中的各个分隔符,每当识别到一个所述分隔符便对所述字符串进行分割一次,并按照分割顺序对所述字符串分割得到的若干子字符串进行储存。22.在本发明第一方面一种可选的实施方式中,所述在所述需要拆分列的所有所述记录都复制过后,在所述需要拆分列的左侧或右侧插入新增列包括:23.在所述需拆分列的所有所述记录都复制过后,在所述需拆分列的左侧或右侧插入新增列;24.获取所述需要拆分列的表头字段名,以所述需拆分列的表头字段名加上_after的后缀作为所述新增列的表头字段名。25.在本发明第一方面一种可选的实施方式中,对于所述源数据表中无需拆分列的每条所述记录,依照所述无需拆分列中所述记录与所述需拆分列中所述记录之间的映射关系进行复制。26.在本发明第一方面一种可选的实施方式中,所述每当识别到一个所述分隔符便对所述字符串进行分割一次之后,所述并按照分割顺序对所述字符串分割得到的若干子字符串进行储存之前包括:对分割得到的若干所述子字符串进行去重处理。27.在本发明第一方面一种可选的实施方式中,所述分隔符包括逗号,破折号,分号,斜杠和竖杠。28.本发明第二方面提供了一种数据表的转换装置,所述转换装置包括:29.第一构造模块,用于构造用于基于分隔符对字符串进行拆分的第一用户自定义函数;30.第二构造模块,用于构造用于统计所述字符串拆分后得到的子字符串的数量的第二用户自定义函数;31.遍历模块,用于遍历源数据表中的每条记录,确定所述源数据表中的需拆分列;32.拆分统计模块,用于利用所述第一用户自定义函数对所述需要拆分列中每条记录的字符串进行拆分,以及通过所述第二用户自定义函数对所述字符串拆分后得到的子字符串的数量进行统计;33.增行模块,用于对于所述需要拆分列中的每条记录,若所述记录的字符串需要被拆分成n个子字符串,则在所述记录的下方复制n-1个所述记录,且n-1个所述记录各占一行;34.增列模块,用于在所述需要拆分列的所有所述记录都复制过后,在所述需要拆分列的左侧或右侧插入新增列;35.填写模块,用于将各个所述记录的所述字符串拆分后得到所述子字符串按照拆分顺序填入所述新增列的每行中,从而得到目标表。36.本发明第三方面提供了一种数据表的转换设备,所述数据表的转换设备包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;37.所述至少一个处理器调用所述存储器中的所述指令,以使得所述数据表的转换设备执行如上述任一项所述的数据表的转换方法。38.本发明第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的数据表的转换方法。39.有益效果:本发明提供了一种数据表的转换方法、装置、设备及存储介质,本发明数据表的转换方法通过构造了两个用户自定义函数来对数据表的每条记录的字符串进行拆分和统计子字符串的数量,利用这两个用户自定义函数可以快速的获取源数据表中需拆分列和需拆分列拆分后子字符串数量,在基于得到的需拆分列和子字符串数量对源数据表的记录进行行和列的扩充,再将拆分后得到的子字符串填入新增列中便可得到目标表,本发明的转换方法通过更改用户自定义函数中的分隔符即可快速实现不同类型字符串的分隔,提高了字符串的拆分效率,同时转换后得到的目标表既保留有源数据表的数据信息,又具有转换后的数据信息,方便转换前后信息的核对。附图说明40.图1为本发明一种数据表的转换方法的一个实施例示意图;41.图2为本发明一种数据表的转换装置的一个实施例示意图;42.图3为本发明一种数据表的转换设备的一个实施例示意图。具体实施方式43.本发明实施例提供了一种数据表的转换方法、装置、设备及存储介质。本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。44.参阅图1,本发明第一方面提供了一种数据表的转换方法,包括:45.s100、构造用于基于分隔符对字符串进行拆分的第一用户自定义函数;46.s200、构造用于统计所述字符串拆分后得到的子字符串的数量的第二用户自定义函数;具体来说,用户自定义函数(udf)是mysql给使用者提供的一种添加新函数的机制,而且相较于mysql固有函数来说,开发和维护起来更加方便,使用用户自定义函数来拆分字符串,通过简单的调整用户自定义函数中的分隔符便可以实现对不同类型字符串的拆分,开发维护方便;47.s300、遍历源数据表中的每条记录,确定所述源数据表中的需拆分列;在步骤s300中,遍历源数据表中的每条记录(主要是除表头以外的记录),如果遍历到某个记录中写入的是可拆分的字符串,则证明该记录所在的列是需拆分列,否则为不需拆分列;48.更具体的来讲,所述遍历源数据表中的每条记录,确定所述源数据表中的需拆分列包括:49.遍历源数据表中的每条记录;遍历时按照以源数据表的左上角表格为起点,从左到右一列一列的方式遍历源数据表中的每条记录,该步骤中遍历的源数据表中每条记录也是去除表头之后的;50.读取每条所述记录中的字符串;在该步骤中,每遍历到一个记录,就提取这个记录中的字符串,然后判断;51.判断所述字符串中是否存在有分隔符;所述分隔符包括逗号,破折号,分号,斜杠和竖杠;若所述字符串中存在有分隔符,则判定所述记录所在的列为需拆分列。在该步骤中,对于每一列只要判断到其中一个记录的字符串中存在有分隔符就可以定义该记录所在的列为需拆分列,这列的后续的记录都可以不遍历了,接着从下一列的顶部记录开始,判断下一列是否为需拆分列。52.s400、利用所述第一用户自定义函数对所述需要拆分列中每条记录的字符串进行拆分,以及通过所述第二用户自定义函数对所述字符串拆分后得到的子字符串的数量进行统计;在该步骤中,由于一个表格中可能使用很多种分隔符,为了能够满足各种分隔符的字符串的拆分,也可以预先准备还n个带有不同分隔符号的第一用户自定义函数,拆分过程中,逐个使用这n个带有不同分隔符号的第一用户自定义函数来拆分记录中的字符串;53.在步骤s400中,所述利用所述第一用户自定义函数对所述需要拆分列中每条记录的字符串进行拆分包括:54.对于所述需拆分列,按照从上到下的顺序读取每条所述记录的字符串;对于每条所述记录的字符串,按照从左到右的顺序识别所述字符串中的各个分隔符,每当识别到一个所述分隔符便对所述字符串进行分割一次,并按照分割顺序对所述字符串分割得到的若干子字符串进行储存。在该步骤中,对每个记录内的字符串进行拆分是一个一个进行的,就是拆分完一个之后才会遍历下一个记录,并且,每拆分完一个记录内的字符串,拆分得到的子字符串会按照拆分顺序先放到缓存中存储起来,每拆分完一个字符串,就存储这个字符串的这批子字符串,当然的在一个需拆分列中,记录也存在需拆分记录(写入的是带有分隔符的字符串)和不需拆分记录(写入的是不带有分隔符的字符串),以三个连续的记录存储的字符串依次为“c1,c2,c3”,“c4”,“c5,c6”为例,“c1,c2,c3”和“c5,c6”所在的记录为需拆分记录,“c4”为无需拆分记录,在缓存存储时中,“c1,c2,c3”和“c5,c6”会拆分后存储到缓存中,“c4”无需拆分存储正在“c3”和“c5”之间,这单个三元个执行完拆分后的存储顺序为“c1”、“c2”、“c3”、“c4”、“c5”、“c6”,从而保证每一需拆分列各记录中的字符不会发生丢失,又能保留原有的顺序;55.另外,由于记录中的字符串可能由多个重复的子字符串利用分隔符间隔而成,所以所述每当识别到一个所述分隔符便对所述字符串进行分割一次之后,所述并按照分割顺序对所述字符串分割得到的若干子字符串进行储存之前还可以包括:对分割得到的若干所述子字符串进行去重处理。56.s500、对于所述需要拆分列中的每条记录,若所述记录的字符串需要被拆分成n个子字符串,则在所述记录的下方复制n-1个所述记录,且n-1个所述记录各占一行;在该步骤中,由于在新增列中,一个记录式存储一个子字符串的,所以新增列的记录数量肯定是要比其对应的需拆分列记录的数量更多的,为了是两者记录数量保持一致,所以需要对子字符串对应的记录进行复制,举例来讲,一个待拆分记录原本的数据是“c1,c2,c3”,拆分后就会max(split_count(src_col))fromsrc_tbl;语句得到。随后,创建一张带有自增序号,行数为n的临时表helper。同时,创建目标表,可直接通过createtabledst_tbllikesrc_tbl的方式创建,再给目标表添加一列,用于存放拆分后字段。80.最后使用语句:81.insertintodst_tblselecta.*,split(a.split_col,split_char,b.id)fromsrc_tableajoinhelp_tablebonb.id《split_count(a.split_col,split_char)andb.id《n;将源表数据和拆分后字段数据插入目标表。82.以下面的一张mysql数据表为例;83.col1col2col31name1c1,c2,c32name2c1,c33name3c4,c4,c484.经过本发明转换后得到的目标表为:85.col1col2col3col3_after1name1c1,c2,c3c11name1c1,c2,c3c21name1c1,c2,c3c32name2c1,c3c12name2c1,c3c33name3c4,c4,c4c486.参见图2,本发明第二方面提供了一种数据表的转换装置,所述拆分装置包括:87.第一构造模块10,用于构造用于基于分隔符对字符串进行拆分的第一用户自定义函数;88.第二构造模块20,用于构造用于统计所述字符串拆分后得到的子字符串的数量的第二用户自定义函数;89.遍历模块30,用于遍历源数据表中的每条记录,确定所述源数据表中的需拆分列;90.拆分统计模块40,用于利用所述第一用户自定义函数对所述需要拆分列中各记录内的字符串进行拆分,以及通过所述第二用户自定义函数对所述字符串拆分后得到的子字符串的数量进行统计;91.增行模块50,用于对于所述需要拆分列中的每个记录,若所述记录中的字符串被拆分成n个子字符串,则在所述记录的下方复制n-1个所述记录;92.增列模块60,用于在所述需要拆分列的所有所述记录都复制过后,在所述需要拆分列的左侧或右侧插入新增列;93.填写模块70,用于将各个所述记录内所述字符串拆分得到所述子字符串按照拆分顺序填入所述新增列中,从而得到目标表。94.在本发明第二方面一种可选的实施方式中,所述遍历模块30包括:95.遍历单元,用于遍历源数据表中的每条记录;96.第一读取单元,用于读取所述记录中的字符串;97.判断单元,用于判断所述字符串中是否存在有分隔符;98.判定单元,用于若所述字符串中是否存在有分隔符,则判定所述记录所在的列为需拆分列。99.在本发明第二方面一种可选的实施方式中,所述拆分统计模块40包括:100.第二读取单元,用于对于所述需拆分列,按照从上到下的顺序逐个读取所述记录内的字符串;101.分割单元,用于对于每一条所述字符串,按照从左到右的顺序识别所述字符串中的各个分隔符,每当识别到一个所述分隔符便对所述字符串进行分割一次,并按照分割顺序对所述字符串分割得到的若干子字符串进行储存。102.在本发明第二方面一种可选的实施方式中,所述增列模块60包括:103.增列单元,用于在所述需拆分列的所有所述记录都复制过后,在所述需拆分列的左侧或右侧插入新增列;104.表头命名单元,用于获取所述需要拆分列的表头字段名,以所述需拆分列的表头字段名加上_after的后缀作为所述新增列的表头字段名。105.在本发明第二方面一种可选的实施方式中,对于所述源数据表中无需拆分列的各记录,依照所述无需拆分列中记录与所述需拆分列中记录之间的映射关系进行复制。106.在本发明第二方面一种可选的实施方式中,所述每当识别到一个所述分隔符便对所述字符串进行分割一次之后,所述并按照分割顺序对所述字符串分割得到的若干子字符串进行储存之前包括:对分割得到的若干所述子字符串进行去重处理。107.在本发明第二方面一种可选的实施方式中,所述分隔符包括逗号,破折号,分号,斜杠和竖杠。108.图3是本发明实施例提供的一种数据表的转换设备的结构示意图,该数据表的转换设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器80(centralprocessingunits,cpu)(例如,一个或一个以上处理器)和存储器90,一个或一个以上存储应用程序或数据的存储介质100(例如一个或一个以上海量存储设备)。其中,存储器和存储介质可以是短暂存储或持久存储。存储在存储介质的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据表的转换设备中的一系列指令操作。更进一步地,处理器可以设置为与存储介质通信,在数据表的转换设备上执行存储介质中的一系列指令操作。109.本发明的数据表的转换设备还可以包括一个或一个以上电源110,一个或一个以上有线或无线网络接口120,一个或一个以上输入输出接口130,和/或,一个或一个以上操作系统,例如windowsserve,macosx,unix,linux,freebsd等等。本领域技术人员可以理解,图3示出的数据表的转换设备结构并不构成对本发明数据表的转换设备的具体限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。110.本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述的数据表的转换方法的步骤。111.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统或装置、单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。112.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。113.以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1