一种数据转换的方法及终端与流程

文档序号:17442403发布日期:2019-04-17 04:56阅读:147来源:国知局
本发明涉及数据处理领域,尤其涉及一种数据转换的方法及终端。
背景技术
::商务智能bi是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决策。其中,etl是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合在一起,为企业的决策提供分析依据,etl是bi项目重要的一个环节,而数据转换又是etl中的一个重要步骤。数据转换实现的是将数据从一个表达形式转换成另一个表达形式的功能,但是现有数据转换方式存在如下缺陷:数据转换只能独立地一次次地执行,数据转换编写复杂,效率低下;当转换条件变化时,需按新的转换条件,重新对数据的全部字段进行一次转换计算,需要投入大量的人力,数据维护效率低。技术实现要素:本发明所要解决的技术问题是:提供一种数据转换的方法及终端,能够实现多次重跑数据的一致性,提高数据转换效率以及正确率。为了解决上述技术问题,本发明采用的一种技术方案为:一种数据转换的方法,包括步骤:s1、接收待转换的源数据的选取条件以及预配置的数据转换指令,所述数据转换指令包括数据转换语句以及预设的目标表;s2、将所述数据转换语句中与所述选取条件对应的参数替换为所述选取条件;s3、执行参数替换后的数据转换语句,将选取的待转换的源数据转换成目标数据,并将所述目标数据插入所述预设的目标表中。为了解决上述技术问题,本发明采用的另一种技术方案为:一种数据转换的终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:s1、接收待转换的源数据的选取条件以及预配置的数据转换指令,所述数据转换指令包括数据转换语句以及预设的目标表;s2、将所述数据转换语句中与所述选取条件对应的参数替换为所述选取条件;s3、执行参数替换后的数据转换语句,将选取的待转换的源数据转换成目标数据,并将所述目标数据插入所述预设的目标表中。本发明的有益效果在于:预先配置数据转换指令,当要进行满足选取条件的源数据的转换时,只需将所述选取条件写入所述预先配置的数据转换指令并执行即可,能够实现数据转换的多次重跑;当转换条件变化时,只需调整转换指令,即可实现数据转换的重新更新;并且所述数据转换指令是事先编写约定好的,不仅降低了数据转换的编写门槛,也保证了多次重跑数据的一致性,提高了数据转换效率以及正确率。附图说明图1为本发明实施例的一种数据转换的方法的步骤流程图;图2为本发明实施例的一种数据转换的终端的结构示意图;标号说明:1、一种数据转换的终端;2、存储器;3、处理器。具体实施方式为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。本发明最关键的构思在于:预先配置数据转换指令,当要进行满足选取条件的源数据的转换时,只需将所述选取条件写入所述预先配置的数据转换指令并执行即可,能够实现数据转换的多次重跑。请参照图1,一种数据转换的方法,包括步骤:s1、接收待转换的源数据的选取条件以及预配置的数据转换指令,所述数据转换指令包括数据转换语句以及预设的目标表;s2、将所述数据转换语句中与所述选取条件对应的参数替换为所述选取条件;s3、执行参数替换后的数据转换语句,将选取的待转换的源数据转换成目标数据,并将所述目标数据插入所述预设的目标表中。从上述描述可知,本发明的有益效果在于:预先配置数据转换指令,当要进行满足选取条件的源数据的转换时,只需将所述选取条件写入所述预先配置的数据转换指令并执行即可,能够实现数据转换的多次重跑;当转换条件变化时,只需调整转换指令,即可实现数据转换的重新更新;并且所述数据转换指令是事先编写约定好的,不仅降低了数据转换的编写门槛,也保证了多次重跑数据的一致性,提高了数据转换效率以及正确率。进一步的,所述数据转换指令还包括目标表字段列表;所述选取条件包括主键列表;将所述目标数据插入所述预设的目标表中包括:根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中。由上述描述可知,根据所述主键列表和目标表字段列表实现生成的目标数据的插入,能够保证目标数据准确、高效的插入。进一步的,所述主键列表包括根据所述预设的目标表确定的多个字段,每个字段表示一个主键;所述主键列表中各个主键组合后对应的主键组合值唯一标识每条记录。由上述描述可知,主键列表包括根据预设的目标表确定的多个字段,每个字段表示一个主键,并且所述主键列表中各个主键组合后对应的主键组合值唯一标识每条记录,使得主键随着目标表字段的不同而不同,提高了主键列表形成的多样性以及不可复制性,由于是基于主键列表来进行目标数据插入预设的目标表中,主键列表形成的不可复制性以及唯一性保证了数据转换的准确性,并且由于主键组合值是基于相应记录的字段得到,也可以进行自检,通过主键组合值的对比判断数据是否错误,进一步提高数据转换的正确率。进一步的,所述选取条件还包括所述主键列表中各个主键的取值;所述步骤s2和s3之间包括:根据所述选取条件,将所述预设的目标表中与所述选取条件对应的记录放入缓存,并将所述记录从所述预设的目标表中删除。由上述描述可知,先将与选取条件对应的记录存放入缓存,并将其从预设的目标表中删除,能够提高后续目标数据写入的便利性。进一步的,将所述预设的目标表中与所述选取条件对应的记录放入缓存之后还包括:为每条记录增加更新标识,并设置每条记录更新标识为否;所述根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中包括:s31、遍历所述目标数据的每一条记录,对每一条记录执行:根据所述主键列表确定所述记录对应的主键组合值是否存在于所述缓存中,若是,则将所述记录按照所述目标表字段列表更新缓存中与所述主键组合值对应的记录,并将所述记录的更新标识设置为是;若否,则直接将所述记录按照所述主键列表和目标表字段列表插入所述预设的目标表中;s32、将所述缓存中更新标识为是的记录插入所述预设的目标表中。由上述描述可知,基于主键列表确定的每一条记录对应的主键组合值判断是否对目标表中相应的记录进行更新,若缓存中存在与目标数据的记录相同的主键组合值,则说明目标数据中存储的对应的记录是正确的,此时只需要更新即可,若不存在,则说明目标数据中存在错误的记录,将其删除,并直接将对应的记录插入目标表,由此不仅保证了多次重跑数据的一致性,而且旧数据中正确的数据得以保存,错误数据被剔除,多余的记录被删除,保证了重跑数据的正确性,此外,还可以对源数据分功能、分模块的转换,能够根据不同的转换条件对源数据进行多次重跑。请参照图2,一种数据转换的终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:s1、接收待转换的源数据的选取条件以及预配置的数据转换指令,所述数据转换指令包括数据转换语句以及预设的目标表;s2、将所述数据转换语句中与所述选取条件对应的参数替换为所述选取条件;s3、执行参数替换后的数据转换语句,将选取的待转换的源数据转换成目标数据,并将所述目标数据插入所述预设的目标表中。从上述描述可知,本发明的有益效果在于:预先配置数据转换指令,当要进行满足选取条件的源数据的转换时,只需将所述选取条件写入所述预先配置的数据转换指令并执行即可,能够实现数据转换的多次重跑;当转换条件变化时,只需调整转换指令,即可实现数据转换的重新更新;并且所述数据转换指令是事先编写约定好的,不仅降低了数据转换的编写门槛,也保证了多次重跑数据的一致性,提高了数据转换效率以及正确率。进一步的,所述数据转换指令还包括目标表字段列表;所述选取条件包括主键列表;将所述目标数据插入所述预设的目标表中包括:根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中。由上述描述可知,根据所述主键列表和目标表字段列表实现生成的目标数据的插入,能够保证目标数据准确、高效的插入。进一步的,所述主键列表包括根据所述预设的目标表确定的多个字段,每个字段表示一个主键;所述主键列表中各个主键组合后对应的主键组合值唯一标识每条记录。由上述描述可知,主键列表包括根据预设的目标表确定的多个字段,每个字段表示一个主键,并且所述主键列表中各个主键组合后对应的主键组合值唯一标识每条记录,使得主键随着目标表字段的不同而不同,提高了主键列表形成的多样性以及不可复制性,由于是基于主键列表来进行目标数据插入预设的目标表中,主键列表形成的不可复制性以及唯一性保证了数据转换的准确性,并且由于主键组合值是基于相应记录的字段计算得到,也可以进行自检,通过主键组合值的对比判断数据是错误,进一步提高数据转换的正确率。进一步的,所述选取条件还包括所述主键列表中各个主键的取值;所述步骤s2和s3之间包括:根据所述选取条件,将所述预设的目标表中与所述选取条件对应的记录放入缓存,并将所述记录从所述预设的目标表中删除。由上述描述可知,先将与选取条件对应的记录存放入缓存,并将其从预设的目标表中删除,能够提高后续目标数据写入的便利性。进一步的,将所述预设的目标表中与所述选取条件对应的记录放入缓存之后还包括:为每条记录增加更新标识,并设置每条记录的更新标识为否;所述根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中包括:s31、遍历所述目标数据的每一条记录,对每一条记录执行:根据所述主键列表确定所述记录对应的主键组合值是否存在于所述缓存中,若是,则将所述记录按照所述目标表字段列表更新缓存中与所述主键组合值对应的记录,并将所述记录的更新标识设置为是;若否,则直接将所述记录按照所述主键列表和目标表字段列表插入所述预设的目标表中;s32、将所述缓存中更新标识为是的记录插入所述预设的目标表中。由上述描述可知,基于主键列表确定的每一条记录对应的主键组合值判断是否对目标表中相应的记录进行更新,若缓存中存在与目标数据的记录相同的主键组合值,则说明目标数据中存储的对应的记录是正确的,此时只需要更新即可,若不存在,则说明目标数据中存在错误的记录,将其删除,并直接将对应的记录插入目标表,由此不仅保证了多次重跑数据的一致性,而且旧数据中正确的数据得以保存,错误数据被剔除,多余的记录被删除,保证了重跑数据的正确性,此外,还可以对源数据分功能、分模块的转换,能够根据不同的转换条件对源数据进行多次重跑。实施例一请参照图1,一种数据转换的方法,包括步骤:s1、接收待转换的源数据的选取条件以及预配置的数据转换指令,所述数据转换指令包括数据转换语句以及预设的目标表;其中,选取条件指的是要进行源数据的选取时的条件,相应地,在进行数据源设计时,就要保证有可以体现该选取条件的字段或根据该选取条件将数据源分成不同的文件;具体的选取条件可以根据实际情况需要进行设置,比如,可以设置选取条件为源数据产生的时间,则进行数据源设计时,就要保证有可以区分数据产生时间的字段或者根据时间分成不同的文件,可以把数据根据其产生的时间归属到不同的日期数据集中,则每次要执行数据转换时,可以根据确定的要获取的是什么日期区间,从源数据中基于时间字段或不同的日期数据集选取对应所述日期区间的数据;所述数据转换语句可以是sql语句或hsql语句(hive的查询语句),在所述数据转换语句中有与所述选取条件对应的参数;比如,对于选取条件是源数据产生的时间,可以定义日期宏,比如[$yesterday$]表示前一天、[$monday$]和[$sunday$]表示前一天所在周的周一和周天、[$firstofmonth$]和[$lastofmonth$]表示前一天所在月的1号和最后一天的日期等,在配置sql语句时,把日期相关的内容用宏表示;s2、将所述数据转换语句中与所述选取条件对应的参数替换为所述选取条件;对于选取条件是源数据产生的时间的情景,接收到要进行数据转换的数据源产生的日期时,将所述日期传入数据转换语句,比如sql语句,将sql语句中的日期宏全部替换成所述宏相对于所传入的日期的日期值;优选的,所述数据转换指令还包括目标表字段列表,所述选取条件包括主键列表和所述主键列表中各个主键的取值,其中,所述主键的取值可以是大于或小于或等于某个值或者符合某个正则表达式;所述主键列表包括根据所述预设的目标表确定的多个字段,每个字段表示一个主键;所述主键列表中各个主键组合后对应的主键组合值唯一标识每条记录;比如,预设的目标表中有多个字段,其中包括日期字段和编号字段,可以设置主键列表为日期、编号,则每条记录的日期字段的值和编号字段的值组合起来就唯一标识所述记录,使之与其它记录区分;可以取所述主键列表中主键日期的取值为2018年12月1日,主键编号的取值为1至20,则从源数据选取的就是日期为2018年12月1日,编号为1至20的记录。s3、执行参数替换后的数据转换语句,将选取的待转换的源数据转换成目标数据,并将所述目标数据插入所述预设的目标表中;执行替换了宏后的sql(haql)语句,生成模板数据,所述目标数据一般是个二维数组;其中,将所述目标数据插入所述预设的目标表中包括:根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中。实施例二本实施例与实施例一的不同在于,所述步骤s2和s3之间包括:根据所述选取条件,将所述预设的目标表中与所述选取条件对应的记录放入缓存,并将所述记录从所述预设的目标表中删除,如果目标表中没有数据,则为空;比如,如果选取的是某一日期的源数据,则在目标表中将该日期对应的记录放入临时缓存,并将所述记录从预设的目标表中删除;将所述预设的目标表中与所述选取条件对应的记录放入缓存之后还包括:为每条记录增加更新标识,并设置每条记录的更新标识为否;根据所述主键列表和目标表字段列表将所述目标数据插入所述预设的目标表中包括:s31、遍历所述目标数据的每一条记录,对每一条记录执行:根据所述主键列表确定所述记录对应的主键组合值是否存在于所述缓存中,若是,则将所述记录按照所述目标表字段列表更新缓存中与所述主键组合值对应的记录,并将所述记录的更新标识设置为是;具体的,可以在所述缓存中根据所述主键列表确定缓存中每条记录对应的主键组合值,然后将根据所述目标数据的记录确定出的主键组合值一一与缓存中的各条记录的主键组合值进行比对,判断是否有相等的;若否,则直接将所述记录按照所述主键列表和目标表字段列表插入所述预设的目标表中;s32、将所述缓存中更新标识为是的记录插入所述预设的目标表中;可以将上述数据转换按照其功能配置到作业中,并启动crontab调度,每天定时去执行作业以执行配置的数据转换来达到自动计算生成bi报表功能,同时也可以通过手动执行来产生指定日期的目标数据。下面以一个具体的例子来进行说明:假设目标表desttable有六个字段(date,type,col1,col2,col3,col4),其原有数据如表1所示:表1datetypecol1col2col3col42018-12-101101316192018-12-102111417202018-12-10-112151821设置主键列表为data和type,所述主键列表中各个主键的取值分别为date=[$yesterday$]和typelike‘%’;当前有两个转换对表1中的数据进行操作:第1个转换是对满足上述设置的选取条件的数据执行字段col1和col2的加10操作;转换1的字段列表为date,type,col1,col2,转换中同时配置可以生成这四个字段的sql语句,其中,主键列表是date,type,目标字段列表是col1,col2;传入2018-12-11的日期值执行转换1,则执行过程如下:1、按照数据选取条件date=[$yesterday$]和typelike‘%’,其中用2018-12-10替换sql中宏[$yesterday$]的值,执行sql语句得到如表3所示的数据到缓存中:表2datetypecol1col2col3col4更新标志2018-12-10110131619否2018-12-10211141720否2018-12-10-112151821否删除目标表中date=2018-12-10和typelike‘%’的值,这时desttable表为空了;2、根据上述选取条件对待转换的源数据进行转换1的操作后得到如表3所示的目标数据:表3datetypecol1col22018-12-10120232018-12-10221242018-12-10322253、接着执行将目标数据按条插入目标表的操作:处理表3中的第一条记录,根据主键列表确定第一条记录对应的主键组合值为date=2018-12-10,type=1,在缓存的第一条找到了,把缓存更新为如表4所示:表4datetypecol1col2col3col4更新标志2018-12-10120231619是2018-12-10211141720否2018-12-10-112151821否处理表3的第二条记录,主键组合值为date=2018-12-10,type=2,在缓存的第二条找到了,把缓存更新为如表5所示:表5datetypecol1col2col3col4更新标志2018-12-10120231619是2018-12-10221241720是2018-12-10-112151821否处理表3的第三条记录,主键组合值为date=2018-12-10,type=3,在缓存中找不到date=2018-12-10,type=3的记录,根据所述主键列表和目标表字段列表将表2的第三条记录直接插入到目标表中,目标表更新为如表6所示:表6datetypecol1col2col3col42018-12-1032225目标数据都处理完后,再把缓存中更新标志为“是”的插入到目标表中,目标表更新为如表7所示:表7datetypecol1col2col3col42018-12-101202316192018-12-102212417202018-12-1032225第2个转换是对满足上述设置的选取条件的数据执行字段col3和col4的加10操作;转换2的字段列表为date,type,col1,col2,转换中同时配置可以生成这四个字段的sql语句,其中,主键列表是date,type,目标字段列表是col1,col2;传入2018-12-11的日期值执行转换2,则执行过程如下:1、按照数据选取条件date=[$yesterday$]和typelike‘%’,其中用2018-12-10替换sql中宏[$yesterday$]的值,执行sql语句得到如表8所示的数据到缓存中:表8datetypecol1col2col3col4更新标志2018-12-10120231619否2018-12-10221241720否2018-12-1032225否删除目标表中date=2018-12-10和typelike‘%’的值,这时desttable表为空了;2、根据上述选取条件对待转换的源数据进行转换2的操作后得到如表9所示的目标数据:表9datetypecol3col42018-12-10126292018-12-10227302018-12-10328313、接着执行将目标数据按条插入目标表的操作:处理表9中的第一条记录,根据主键列表确定第一条记录对应的主键组合值为date=2018-12-10,type=1,在缓存的第一条找到了,把缓存更新为如表10所示:表10datetypecol1col2col3col4更新标志2018-12-10120232629是2018-12-10221241720否2018-12-1032225否处理表9中的第二条记录,根据主键列表确定第二条记录对应的主键组合值为date=2018-12-10,type=2,在缓存的第二条找到了,把缓存更新为如表11所示:表11处理表9中的第三条记录,根据主键列表确定第三条记录对应的主键组合值为date=2018-12-10,type=3,在缓存的第三条找到了,把缓存更新为如表12所示:表12datetypecol1col2col3col4更新标志2018-12-10120232629是2018-12-10221242730是2018-12-10322252831是目标数据中的三条都处理完了,再把缓存中更新标志为“是”的插入到目标表中,目标表更新如表13所示:表13datetypecol1col2col3col42018-12-101202326292018-12-102212427302018-12-10322252831实施例三请参照图2,一种数据转换的终端1,包括存储器2、处理器3及存储在存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。实施例四请参照图2,一种数据转换的终端1,包括存储器2、处理器3及存储在存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例二中的步骤。综上所述,本发明提供的一种数据转换的方法及终端,预先配置数据转换指令,当要进行满足选取条件的源数据的转换时,只需将所述选取条件写入所述预先配置的数据转换指令并执行即可,在将目标数据插入目标表时,基于主键列表确定的每一条记录对应的主键组合值判断是进行相应记录的字段的更新还是直接将相应字段插入目标表,不仅保证了多次重跑数据的一致性,而且旧数据中正确的数据得以保存,错误数据被剔除,多余的记录被删除,保证了重跑数据的正确性,同时实现设置好数据转换指令,降低了数据转换的编写门槛,提高了对数据转换重构的编写和重跑效率,此外,还可以对源数据分功能、分模块的转换,能够根据不同的转换条件对源数据进行多次重跑。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的
技术领域
:,均同理包括在本发明的专利保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1