发明内容
本发明提供一种数据抽取、转换和加载的执行方法和装置,用于在ETL执行中同时实现周期性ETL和一次性ETL。
本发明提供一种数据抽取、转换和加载ETL的执行方法,包括:
满足ETL任务的执行触发条件时,获取当前时间;
将所述当前时间作为所述ETL任务的执行时间插入ETL执行队列;
根据所述ETL执行队列执行ETL任务。
其中,所述ETL任务的执行触发条件包括手动触发、或事件触发。
其中,所述将当前时间作为所述ETL任务的执行时间插入ETL执行队列包括:
判断所述ETL执行队列是否为空,为空时则将所述当前时间作为所述ETL任务的执行时间插入到所述ETL执行队列的队首;
所述ETL执行队列不为空时,根据所述当前时间、以及所述ETL执行队列中的已有时间,按照时间先后顺序将所述当前时间作为所述ETL任务的执行时间插入到所述ETL执行队列中的对应位置。
其中,所述根据ETL执行队列执行ETL任务包括:
获取所述ETL执行队列中具有最先时间顺序的时间;
当前时间等于或晚于所述具有最先时间顺序的时间时,获取上一次ETL任务执行的上下文环境;
根据所述获取到的上下文环境执行ETL任务。
其中,所述根据获取到的上下文环境执行ETL后,还包括:
ETL执行完毕后,保存本次ETL执行的上下文环境;
将所述具有最先时间顺序的时间从所述ETL执行队列中删除。
其中,所述满足ETL任务的执行触发条件时,获取当前时间前,还包括:
设置ETL任务,所述ETL任务中包括至少一个任务保存项,所述每一任务保存项中包括上下文环境;对各所述任务保存项的上下文环境综合后得到所述ETL任务执行的上下文环境。
其中,所述ETL任务中包括的每一个任务保存项,均属于预先设置的系统保存项;对于所述ETL任务中包括的不属于系统保存项的任务保存项进行删除。
其中,所述ETL执行的上下文环境至少包括:本次执行时间、本次抽取到的原始数据的ID、本次加载目的数据的ID中的一种或多种。
本发明提供一种ETL的执行装置,包括:
时间获取单元,用于在判断满足ETL任务的执行触发条件时,获取当前时间;
队列维护单元,用于将所述时间获取单元获取的当前时间作为所述ETL任务的执行时间插入ETL执行队列;
队列执行单元,用于根据所述队列维护单元维护的ETL执行队列执行ETL任务。
其中,所述队列维护单元包括:
第一判断子单元,用于判断所述ETL执行队列是否为空;
时间插入子单元,用于在所述第一判断子单元判断所述ETL执行队列为空时,将所述当前时间插入到所述ETL执行队列的队首;在所述第一判断子单元判断所述ETL执行队列不为空时,根据所述当前时间、以及所述ETL执行队列中的已有时间,按照时间先后顺序将所述当前时间作为所述ETL任务的执行时间插入到所述ETL执行队列中的对应位置。
其中,所述队列执行单元包括:
时间获取子单元,用于获取所述ETL执行队列中具有最先时间顺序的时间;
上下文环境获取子单元,用于在所述时间获取子单元获取的当前时间等于或晚于所述具有最先时间顺序的时间时,获取上一次ETL任务执行的上下文环境;
执行子单元,用于根据所述上下文环境获取子单元获取到的上下文环境执行ETL任务。
其中,所述队列执行单元还包括:上下文环境存储子单元,用于在所述执行子单元的ETL执行完毕后,保存本次ETL执行的上下文环境;
所述队列维护单元还包括:时间删除子单元,用于在所述队列执行单元的ETL执行完毕后,将所述具有最先时间顺序的时间从所述ETL执行队列中删除。
其中,所述执行装置还包括:
ETL任务设置单元,用于设置ETL任务,所述ETL任务中包括至少一个任务保存项,所述每一任务保存项中包括上下文环境;对各所述任务保存项的上下文环境综合后得到所述ETL任务执行的上下文环境。
其中,还包括:
系统保存项设置单元,用于设置多个任务保存项;
ETL任务检查单元,用于检查所述ETL任务设置单元设置的ETL任务中包括的每一个任务保存项是否属于预先设置的系统保存项;对于所述ETL任务中包括的不属于系统保存项的任务保存项进行删除。
与现有技术相比,本发明具有以下优点:
通过使用本发明,将周期性ETL的执行时间和一次性ETL的执行时间统一通过队列进行维护,可同时通过周期性ETL方式或一次性ETL来触发ETL的执行,克服了现有技术中只能单一实现周期性ETL或一次性ETL的缺陷,加强了ETL执行与用户的交互性,增加了ETL执行的灵活性。另外,通过保存每一次ETL执行的上下文环境(包括周期性ETL的执行上下文环境及一次性ETL的上下文环境),使一次性ETL的执行不会影响到周期性ETL的执行,也不会影响ETL结果数据的准确性。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明提供一种ETL的执行方法,如图2所示,包括:
步骤s201、满足ETL任务的执行触发条件时,获取当前时间。
步骤s202、将当前时间作为该ETL任务的执行时间插入ETL执行队列。
步骤s203、根据ETL执行队列执行ETL任务。
通过使用本发明,将周期性ETL的执行时间和一次性ETL的执行时间统一通过队列进行维护,可同时通过周期性ETL方式或一次性ETL来触发ETL的执行,克服了现有技术中只能单一实现周期性ETL或一次性ETL的缺陷,加强了ETL执行与用户的交互性,增加了ETL执行的灵活性。
本发明的ETL执行方法中,系统以ETL任务为单位执行。为了设置ETL任务,本发明中首先设置一系列需要保存的上下文环境保存项,以下称为任务保存项。为了维护任务保存项,对每个任务保存项通过一个唯一的标识ID作为标识,并将各任务保存项的集合作为系统保存项。系统保存项中包括每个任务保存项及其对应的ID,例如使用如表1所示的结构维护系统保存项:
表1 系统保存项的结构
标识ID | 任务保存项 |
[ID1] | 任务保存项1 |
[ID2] | 任务保存项2 |
… | … |
[IDN] | 任务保存项N |
该系统保存项中包括了ETL系统所有可能的任务保存项,如果ETL系统需要扩展,只需要在系统保存项添加新的任务保存项即可。
根据上述系统保存项中的任务保存项,即可进行ETL任务的设置。设置ETL任务时,每个ETL任务中包括至少一个任务保存项。例如,对于ETL任务A,可能包括任务保存项1、任务保存项2以及任务保存项3;对于ETL任务B,可能包括任务保存项4;对于ETL任务C,可能包括任务保存项1以及任务保存项5。由于每一任务保存项中包括上下文环境,因此对各任务保存项的上下文环境综合后即可得到该ETL任务执行的上下文环境,该上下文环境包括ETL执行的时间点,本次抽取到的原始数据的ID,本次加载目的数据的ID等等
在进行ETL任务的设置后,系统会对已设置的ETL任务中的任务保存项进行检查。为了确保ETL任务执行的可控性,需要确保ETL任务中包括的每一个任务保存项均属于预先设置的系统保存项,即为系统保存项的子集;对于已设置的ETL任务中包括的不属于系统保存项的任务保存项进行删除,并通过适当的方式(如告警、记录日志)通知用户。
基于上述ETL任务的设置方法,本发明提供的ETL的执行方法中,包括对ETL触发条件的监控进程、以及ETL的执行进程两部分。以下分别对这两部分流程分别进行说明。
首先对ETL触发条件的监控进行介绍,对ETL触发条件进行监控的目的在于,当需要执行一次性ETL时,触发ETL任务的执行并将触发的当前时间作为该ETL任务的执行时间添加到ETL执行队列中,添加的位置由当前ETL执行队列中已有的内容确定。该执行队列中的每个值表示不同ETL任务的执行时间,以下的流程中,假设按照时间顺序在ETL执行队列中维护不同的时间,时间越早在ETL执行队列中的位置越靠前。则对ETL触发条件的监控流程如图3所示,包括以下步骤:
步骤s301、触发ETL执行;在满足ETL执行触发条件(如用户手动触发,事件触发等)时,触发ETL立即执行。
步骤s302、获取当前时间A;接收到ETL立即执行指令后,获取当前时间A作为ETL的执行时间。
步骤s303、查询ETL执行队列。
步骤s304、判断ETL执行队列是否为空,是则进行步骤s305,否则进行步骤s306。
步骤s305、执行队列为空,将A插入执行队列;流程结束。
步骤s306、从队首开始,依次获取执行队列中的每一个值B。
步骤s307、比较A和B的关系,A≤B(即当前时间A早于B表示的时间)时进行步骤s308,A>B(即当前时间A晚于B表示的时间)时进行步骤s309。存在当前时间A晚于B表示的时间的情况的原因在于,在当前时间A之前的B所表示的时间有ETL执行,在当前时间A插入执行队列时该ETL尚未执行完毕,导致B所表示的时间尚未从执行队列中删除。因此,可能存在当前时间A晚于B表示的时间的情况。
步骤s308、将A插入到ETL执行队列中B的位置之前;流程结束。
步骤s309、判断B是否是ETL执行队列中的最后一个值,是则进行步骤s310,否则进行步骤s306。
步骤s310、将A插入到ETL执行队列的最后;流程结束。
首先对ETL的执行进行介绍,根据ETL执行队列执行ETL的原理在于,周期性检测当前时间与ETL执行队列中时间顺序最靠前的时间的关系,当前时间到达或超过ETL执行队列中时间顺序最靠前的时间时,开始执行ETL,ETL执行完毕后,将ETL执行队列中时间顺序最靠前的时间从ETL队列中删除。另外,在每次ETK执行过程中,获取上一次ETL执行的上下文环境用于ETL的执行;在每次ETK执行完毕后,存储本次ETL执行的上下文环境。具体的,该ETL的执行流程如图4所示,包括:
步骤s401、从队首开始,依次获取执行队列中的每一个值C。
步骤s402、比较C和当前时间D的关系,C>D(即C表示的时间晚于当前时间D)则进行步骤s403,C≤D(即C表示的时间早于或到达当前时间D)则进行步骤s404。
步骤s403、等待5s,进行步骤s401。这里以5s为一个周期为例,具体的时间可以根据需要进行设置。
步骤s404、获取上一次ETL任务执行的上下文环境。
步骤s405、执行ETL任务;获取上一次ETL任务执行的上下文环境后,ETL任务在上一次的基础上开始执行,该ETL任务的执行包括:执行ETL任务中包括的每一任务保存项。
步骤s406、保存ETL任务的上下文环境;本次ETL任务执行完成后,将本次ETL任务执行的上下文环境(如ETL本次执行的时间点,本次抽取到的原始数据的ID,本次加载目的数据的ID等等)保存,供下次ETL任务执行使用。
步骤s407、删除执行队列中第一个值,进行步骤s403。通过该步骤,将ETL执行队列中时间顺序最靠前的时间从ETL队列中删除。
本发明中还提供一种ETL的执行装置,如图5所示,包括:
时间获取单元10,用于在判断满足ETL任务的执行触发条件时,获取当前时间;该ETL任务的执行触发条件包括手动触发、或事件触发。
队列维护单元20,用于将时间获取单元10获取的当前时间作为该ETL任务的执行时间插入ETL执行队列。
队列执行单元30,用于根据队列维护单元10维护的ETL执行队列执行ETL任务。
本发明的ETL的执行装置中,如图6所示,还可以具有以下结构:
其中,队列维护单元20可以进一步包括:
第一判断子单元21,用于判断ETL执行队列是否为空。
时间插入子单元22,用于在第一判断子单元21判断ETL执行队列为空时,将当前时间作为该ETL任务的执行时间插入到ETL执行队列的队首;在第一判断子单元21判断ETL执行队列不为空时,根据当前时间、以及ETL执行队列中的已有时间,按照时间先后顺序将当前时间作为该ETL任务的执行时间插入到ETL执行队列中的对应位置。
时间删除子单元23,用于在队列执行单元30的ETL任务执行完毕后,将具有最先时间顺序的时间从ETL执行队列中删除。
其中,队列执行单元30可以进一步包括:
时间获取子单元31,用于获取ETL执行队列中具有最先时间顺序的时间。
上下文环境获取子单元32,用于在时间获取子单元31获取的当前时间等于或晚于具有最先时间顺序的时间时,获取上一次ETL任务执行的上下文环境。
执行子单元33,用于根据上下文环境获取子单元32获取到的上下文环境执行ETL任务。
上下文环境存储子单元34,用于在执行子单元33的ETL任务执行完毕后,保存本次ETL任务执行的上下文环境。
该ETL的执行装置中还可以包括:
ETL任务设置单元40,用于设置ETL任务,每个ETL任务中包括至少一个任务保存项,每一任务保存项中包括上下文环境;对各任务保存项的上下文环境综合后即可得到该ETL任务执行的上下文环境。其中,ETL任务执行的上下文环境至少包括:本次执行的时间、本次抽取到的原始数据的ID、本次加载目的数据的ID中的一种或多种。队列执行单元30将根据该设置执行ETL任务。同时,时间获取单元10可以根据该设置判断是否满足ETL任务的执行触发条件。
系统保存项设置单元50,用于设置多个任务保存项,这些任务保存项构成了系统中所有可能的上下文环境保存项,不同的任务保存项可以通过不同的标识进行区分。在需要对ETL中的上下文环境进行扩展时,只需对系统保存项设置单元50中的任务保存项进行扩展、添加新的任务保存项即可即可。
ETL任务检查单元60,用于检查ETL任务设置单元40设置的ETL任务中包括的每一个任务保存项是否属于系统保存项设置单元50中预先设置的系统保存项。为了保证所有ETL任务可控,对于ETL任务中包括的不属于系统保存项的任务保存项进行删除。
以下描述一个本发明中ETL执行方法的具体应用场景。
假设某公司统计员工访问网站的日报表,可配置成周期性ETL,如在每天的凌晨1点统计前一天的所有数据,形成前一天的日报表。如果在今天下午4点需要查看4点前员工访问网站的日报表,则需要触发立即执行ETL,将4点前的数据汇集成日报表,并保存原始数据的ID及执行时间作为上下文环境。在明天凌晨1点启动周期性ETL,取得今天4点执行完成时的上下文环境,从该位置继续执行。使用这种方案,不会影响结果数据的准确性,实现了立即执行ETL与周期性ETL的融合。
使用本发明提供的方法和装置时,可同时通过周期性ETL方式或一次性ETL来触发ETL的执行,克服了现有技术中只能单一实现周期性ETL或一次性ETL的缺陷,加强了ETL执行与用户的交互性,增加了ETL执行的灵活性。另外,通过保存每一次ETL执行的上下文环境(包括周期性ETL的执行上下文环境及一次性ETL的上下文环境),使一次性ETL的执行不会影响到周期性ETL的执行,也不会影响ETL结果数据的准确性。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。