一种生成入库脚本以及数据入库的方法和设备与流程

文档序号:17441102发布日期:2019-04-17 04:46阅读:454来源:国知局
本申请涉及信息
技术领域
:,尤其涉及一种生成入库脚本以及数据入库的方法和设备。
背景技术
::etl(extract-transform-load,抽取、转换、加载)是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。业界对于大数据etl方案的实现方式是对各个需要入库的数据创建独立的入库脚本文件,在需要进行数据入库时,执行该脚本文件将数据加载至数据仓库中。此种方案中,一旦涉及到数据表(包括源表或目标表)中数据结构的更新,例如源表或者目标表的数据结构发生了变化,就需要重新修改数据表的数据结构以及入库脚本的内容。由此,大量的入库脚本和数据表结构需要开发人员持续手工维护,造成时间和成本上的浪费并且容易出错。申请内容本申请的目的之一是提供一种生成入库脚本以及数据入库的的方案。为实现上述目的,本申请的一些实施例提供一种生成入库脚本的方法,该方法包括:获取本次入库的源表和目标表的配置信息;根据所述配置信息,对数据仓库中所述源表和目标表进行检查,更新数据仓库中所述源表和/或目标表的数据结构;根据所述源表与目标表的数据结构,生成入库脚本。此外,本申请的一些实施例还提供了一种数据入库的方法,该方法包括:采用前述种生成入库脚本的方法生成入库脚本;执行所述入库脚本,抽取入库数据,以目标表的数据结构加载至数据仓库中。基于本申请的另一方面,还提供了一种生成入库脚本的设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述生成入库脚本的方法。此外,本申请的一些实施例还提供了一种数据入库的设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述数据入库的方法。此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述生成入库脚本的方法或数据入库的方法。本申请实施例提供的方案中,可以在每次数据入库时获取本次入库的源表和目标表的配置信息,并根据所述配置信息,对数据仓库中所述源表和目标表进行检查,自动化地发现源表和目标表数据结构的变化,并对其进行更新,进而根据所述源表与目标表的数据结构,动态生成入库脚本,无需在数据表的数据结构更新时,由开发人员持续手工维护数据表的数据结构和入库脚本,由此通过执行该入库脚本可以实现数据的自动化入库,从而降低时间、人员的成本以及出错的概率。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本申请实施例提供的一种生成入库脚本的方法的处理流程图;图2为本申请实施例中确定ddl语句时的处理流程图;图3为采用本申请实施例提供的数据入库方案实现自动入库服务的处理流程图;图4为本申请实施例提供的一种设备的结构示意图;附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。本申请实施例提供了一种生成入库脚本的方法,该方法可以在每次数据入库时获取本次入库的源表和目标表的配置信息,从而自动化地发现和获取数据表的数据结构的变化,然后动态生成用于实现数据持久化的入库脚本,因此无需由开发人员持续手工维护数据表的数据结构和入库脚本,提高了效率,减少了数据入库的时间和成本。在实际场景中,该方法的执行主体可以是用户设备、或者用户设备与网络设备通过网络相集成所构成的设备,或者也可以是运行于上述设备的应用程序,所述用户设备包括但不限于计算机、手机、平板电脑、智能手表、手环等各类终端设备,所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现,可以用于实现设置闹钟时的部分处理功能。在此,云由基于云计算(cloudcomputing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。图1示出了本申请实施例提供的一种生成入库脚本的方法的处理流程图,该方法包括如下处理步骤:步骤s101,获取本次入库的源表和目标表的配置信息。其中,所述源表是指进行数据入库时由数据源抽取的数据以一定数据结构所形成的数据表,所述目标表是指数据入库时来自数据源的数据经过特定的处理(例如数据清洗、衍生字段扩充、数据类型转换等)之后以一定数据结构所形成的数据表。对于一次数据入库,其目的在于获取源表形式的数据,并在处理之后生成目标表的形式的数据,完成数据的持久化。所述配置信息是关于源表和目标表的数据结构的信息,例如数据类型、字段名称等。在本申请的一个实施例中,在获取本次入库的源表和目标表的配置信息时,可以先获取入库参数,该入库参数用于确定入库数据的范围,例如哪个数据库、哪张数据表、某一个时间段或者触发事件等,入库参数具体形式可以是表名、库名、时间信息等。然后,根据所述入库参数确定入库数据,并获取所述入库数据对应的源表和目标表的配置信息。若所述入库参数所确定的入库数据的范围为业务系统a中的01:00:00至02:00:00之间的增量数据,由此可以将这部分增量数据确定为本次入库的入库数据,然后获取这些入库数据对应的源表和目标表的配置信息,例如源表和目标表的各个字段名称、每个字段的数据类型等。通过入库参数可以对每次入库的范围进行限定,以便于确定数据自动入库的计划,例如可以是每隔一定的时间进行一次数据入库,或者也可以使某一事件触发时进行一次数据入库。步骤s102,根据所述配置信息,对数据仓库中所述源表和目标表进行检查,更新数据仓库中所述源表和/或目标表的数据结构。通过进行检查,可以确定数据仓库中是否存在目标表,以及本次入库时的源表和目标表的数据结构与数据仓库中已有的源表和目标表的数据结构之间是否发生了变化,由此来更新数据仓库中所述源表和/或目标表的数据结构,使其与配置信息中的内容一致,确保能够正确地生成本次的入库脚本。步骤s103,根据所述源表与目标表的数据结构,生成入库脚本。若在每次数据入库时执行上述方案,即使源表或者目标表的数据结构发生了变化,也可以根据配置信息自动更新数据仓库中源表或者目标表的数据结构,进而根据数据结构快速生成入库脚本,由此通过执行该入库脚本可以实现数据的自动化入库,从而降低时间、人员的成本以及出错的概率。在更新数据仓库中所述源表、目标表的数据结构时,可以通过执行ddl(datadefinitionlanguage,数据定义语言)语句实现表(table)的更新。例如,本申请的一个实施例中,在根据所述配置信息,对数据仓库中所述源表和目标表进行检查,更新数据仓库中所述源表和/或目标表的数据结构时,可以先根据所述配置信息,对数据仓库中所述源表和目标表进行检查,确定关于所述源表和/或目标表的ddl语句,然后执行所述ddl语句,更新数据仓库中所述源表和/或目标表的数据结构。由此,可以通过一种标准化的方式对数据仓库中源表或者目标表的数据结构进行调整,使其符合本次入库操作的配置信息。本申请实施例中,在确定ddl语句时,可以采用如图2所示的处理步骤:步骤s201,根据所述配置信息中涉及的源表和目标表,读取数据仓库中所述源表和目标表的元数据。例如,由配置信息可知本次入库涉及的源表和目标表分别为source1和target1,由此可以尝试在数据仓库中读取该源表source1和目标表target1的元数据。步骤s202,根据读取的结果判断数据仓库中是否存在所述目标表。在实际场景中,读取的结果至少包括两种:一种是能够读取到源表和目标表的元数据,另一种是只能够读取到源表的元数据、而无法读取到目标表的元数据。由此,可以通过读取的结果中是否能够读取到目标表的元数据,来判断当前的数据仓库中是否存在目标表,在第一种情况下,若能够读取到目标表的元数据,则表示数据仓库中存在目标表,而在第二种情况下,若无法读取到目标表的元数据,则表示数据仓库中不存在目标表。步骤s203,若已存在所述目标表,则根据所述配置信息中源表和目标表的字段,与已存在的源表和目标表的字段之间的数据结构变化,确定关于源表和/或目标表的ddl语句。在此种情况下,由于无需创建新的目标表,因此需要使用修改数据表的dll语句。对于源表,可以比较配置信息中源表的字段与数据仓库中已存在的源表之间的数据结构变化,确定用于修改源表的ddl语句,作为关于所述源表的ddl语句。而对于目标表,也可以比较配置信息中目标表的字段与数据仓库中已存在的目标表之间的数据结构变化,确定用于修改目标表的ddl语句,作为关于所述源表的ddl语句。在实际场景中,可能仅有源表的数据结构发生了变化,也可能仅有目标表的数据结构发生了变化,此外还有可能是源表和目标表的数据结构都发生了变化。因此,通过执行这些ddl语句,可以更新数据仓库中所述源表和/或目标表的数据结构。当数据仓库中已存在所述目标表时,可能会出现有多个源表对应一个目标表的情况,例如对于目标表target1,可能有多个源表source1、source2、source3与其对应,这三张源表中的所有或者一部分数据在清洗、转换之后均写入到目标表target1,以实现数据的持久化。由此,在已存在所述目标表时,还需要检查是否有多个源表对应所述目标表,若存在多个源表对应所述目标表,则确定用于修改所述多个源表的字段的数据结构的ddl语句,即在除了需要获得用于修改本次入库的配置信息中涉及的源表数据结构的ddl语句之外,还需要获得用于修改目标表所对应的其它源表数据结构的ddl语句。此外,在另一种情况下,还包括步骤s204,当确认数据仓库中不存在所述目标表时,根据所述配置信息中源表与已存在的源表的字段的数据结构变化、以及所述配置信息中目标表的字段,确定关于源表和/或目标表的ddl语句。对于源表,可以比较配置信息中源表的字段与数据仓库中已存在的源表之间的数据结构变化,确定用于修改源表的ddl语句,作为关于所述源表的ddl语句。而对于目标表,由于数据仓库中不存在该目标表,因此可以根据所述配置信息中目标表的字段,来确定用于创建该目标表的ddl语句,来作为关于目标表的ddl语句。本申请的一种实施例中,在数据仓库中不存在所述目标表的情况下确定关于目标表的ddl语句时,若所述配置信息中目标表的字段中包含衍生字段,则需要确定用于创建所述目标表中衍生字段的数据结构的ddl语句。其中,所述衍生字段是指无法基于已存在的源表的字段直接获得的字段,需要基于所述已存在的源表的字段创建,例如,源表source1中的某些字段为用户的ip(internetprotocol,网间互联协议)地址,而目标表target1中的字段为用户的地理位置,此时用户的地理位置的字段即为衍生字段,无法由源表source1直接获得,而是需要结合ip地址与地理位置之间的映射关系来创建。在确定关于源表和/或目标表的ddl语句之后,通过执行这些ddl语句,可以更新数据仓库中所述源表和/或目标表的数据结构,进而根据所述源表与目标表的数据结构,生成入库脚本。由此,在每次进行数据入库时,获取本次数据入库的配置信息来进行自动化的判断,可以发现和更新表的数据结构的变化,从而生成合适的入库脚本,同时配置信息中可以设定衍生字段来扩充目标表的内容,能够适应更加复杂的数据持久化场景。在本申请的另一些实施例中,在根据所述源表与目标表的数据结构,生成入库脚本时,基于实际应用场景的需求,还需要确定是否需要清除历史数据、是否需要预创建关于入库数据的分区等。因此在生成入库脚本时,结合这些需求,可以根据所述源表与目标表的数据结构,并结合历史数据控制信息和/或分区预创建信息,生成入库脚本。其中,所述历史数据控制信息用于表示是否需要清除历史数据,所述历史数据是指已转换至目标表的源表中所包含的数据,例如本次入库所涉及的源表为source1,目标表为target1,当完成本次入库之后,源表source1的数据即为历史数据。通过历史数据控制信息,可以控制最终生成的入库脚本中是否会对历史数据进行清除,若需要清除历史数据,则生成的入库脚本时会添加相应的处理语句,当这些处理语句被执行时,会清除相关的历史数据。反之,若所述历史数据控制信息为不对历史数据进行清除,则不会在生成的入库脚本时会添加用于清除历史数据的处理语句,由此可以保留历史数据。由此,通过调整历史数据控制信息的内容,可以控制在数据入库时保留或者清除历史数据,若保留有历史数据,可以作为入库数据的冗余冗余备份,当入库的数据发生错误时,可以通过查找历史数据进行恢复。而所述分区预创建信息用于表示需要预创建关于入库数据的分区,实际场景中,所述入库数据的分区形式可以与前述的入库参数向适应。例如,当入库参数是通过时间信息划分入库数据的范围时,所述分区也可以采用数据的时间信息,该时间信息可以是数据的创建时间、修改时间等。通过在入库脚本中加入用于预创建关于入库数据的分区的语句,可以在入库脚本被执行时创建后续数据入库时入库数据的分区。在特定情况下,若未预创建关于入库数据的分区,可能会在数据入库时报错。例如,若本次入库时,入库参数所确定的入库数据的范围为业务系统a中的01:00:00至02:00:00之间的增量数据,而下次入库时其相应的入库参数所确定的入库数据范围可能是业务系统a中的02:00:00至03:00:00之间的增量数据,在本次入库时,若需要预创建关于入库数据的分区,则可以创建一个关于02:00:00至03:00:00之间的增量数据的分区。若未预创建该分区,当02:00:00至03:00:00之间没有产生增量数据时,下次入库将会报错,而当已经预创建该分区之后,即使02:00:00至03:00:00之间没有产生增量数据,下次入库时也会输入一个空的数据集(即该预创建的分区),因此不会发生报错。由此,在参考源表与目标表的数据结构的基础上,结合历史数据控制信息和/或分区预创建信息,可以生成本次入库所需要使用的入库脚本。此外,本申请实施例还提供了一种数据入库的方法,该方法首先采用前述任意一种方案生成入库脚本,然后执行所述入库脚本,来抽取入库数据,使得入库数据以目标表的数据结构加载至数据仓库中,从而完成数据入库。在本申请的一个实施例中,在执行所述入库脚本之前,还可以根据对加载至数据仓库中的数据的分区方式,更新所述入库脚本。其中,所述分区方式包括动态分区和静态分区,不同的分区方式会使得入库脚本的内容存在区别。在实际场景中,可以采用其中一种作为默认的分区方式,例如以静态分区作为默认的分区方式,当不需要进行动态分区时,采用对应静态分区的默认入库脚本,而当需要动态分区时,则对默认入库脚本进行调整,使其对应动态分区的方式。图3示出了采用本申请实施例提供的数据入库方案实现自动入库服务的处理流程图,该处理流程包括以下处理步骤:步骤s301,读取参数。该参数即为入库参数,用于确定本次确定入库数据的范围。步骤s302,根据该参数读取job的配置表。其中,每一次数据自动入库的任务对应一个job,所述配置表记录了该job的配置信息。步骤s303,判断配置表的中配置信息是否有效,若有效则继续执行步骤s304,若无效,则结束本次入库。步骤s304,根据配置信息中涉及的源表和目标表读取数据仓库中的元数据。步骤s305,判断数据仓库中是否存在本次入库的目标表。若存在,则执行步骤s306,若不存在,则执行步骤s307。步骤s306,创建新建目标表的ddl语句,并执行步骤s309。步骤s307,检查源表和目标表的数据结构变化。步骤s308,检查是否有多个源表对应一个目标表,并结合上一步的检查结果,创建修改数据表的ddl语句,并执行步骤s309。步骤s309,执行ddl语句,处理数据结构的变化。步骤s310,确定是否需要清除历史数据,若需要则执行步骤s311,若不需要则执行步骤s312。步骤s311,生成清除历史数据对应的脚本处理语句,继续执行步骤s312。步骤s312,确定是否需要预创建入库数据的分区,若需要则执行步骤s313,若不需要则执行步骤s314。步骤s313,生成预创建分区对应的脚本处理语句,继续执行步骤s314。步骤s314,判断是否需要整体加载已有的入库脚本,若需要则执行步骤s315,否则执行步骤s316。步骤s315,读取已有的入库脚本,继续执行步骤s320。步骤s316,根据前述的信息创建新的入库脚本。步骤s317,确定是否需要动态分区,若需要则执行步骤s318,若不需要则执行步骤s319。步骤s318,根据静态分区的要求更新入库脚本,继续执行步骤s320。步骤s319,根据动态分区的要求更新入库脚本,继续执行步骤s320。步骤s320,执行入库脚本,完成后结束本次入库。在本申请的另一些实施例还提供了一种设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述生成入库脚本的方法或者数据入库的方法。图4示出了适用于实现本申请实施例中的方法和/或技术方案的一种计算设备的结构,该设备400包括中央处理单元(cpu,centralprocessingunit)401,其可以根据存储在只读存储器(rom,readonlymemory)402中的程序或者从存储部分408加载到随机访问存储器(ram,randomaccessmemory)403中的程序而执行各种适当的动作和处理。在ram403中,还存储有系统操作所需的各种程序和数据。cpu401、rom402以及ram403通过总线404彼此相连。输入/输出(i/o,input/output)接口405也连接至总线404。以下部件连接至i/o接口405:包括键盘、鼠标、触摸屏等的输入部分406;包括诸如阴极射线管(crt,cathoderaytube)、液晶显示器(lcd,liquidcrystaldisplay)、led显示器、oled显示器等以及扬声器等的输出部分407;包括硬盘、光盘、磁盘、半导体存储器等一个或多个计算机可读介质的存储部分408;以及包括诸如lan(局域网,localareanetwork)卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。特别地,本申请实施例中的方法和/或实施例可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在该计算机程序被中央处理单元(cpu)401执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。附图中的流程图或框图示出了按照本申请各种实施例的设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的针对硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个计算机可读指令,所述计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1