一種數(shù)據(jù)加載的方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及網(wǎng)絡管理技術領域,尤其涉及一種數(shù)據(jù)加載的方法和裝置。
【背景技術】
[0002]隨著大數(shù)據(jù)時代的到來,不同數(shù)據(jù)庫之間的數(shù)據(jù)交換需求越來越多,而ETL(Extract Transform Load,抽取轉換加載)用于從源數(shù)據(jù)庫中抽取數(shù)據(jù),并將抽取的數(shù)據(jù)加載到目標數(shù)據(jù)庫中。例如,從RDBMS (Relat1nal Database Management System,關系數(shù)據(jù)庫管理系統(tǒng))數(shù)據(jù)庫(例如,Oracle、MySQL等)中抽取數(shù)據(jù),并將抽取的數(shù)據(jù)加載到Hadoop (分布式)數(shù)據(jù)庫中?;蛘?,從Hadoop數(shù)據(jù)庫中抽取數(shù)據(jù),并將抽取的數(shù)據(jù)加載到RDBMS數(shù)據(jù)庫中。
[0003]在大數(shù)據(jù)時代,面對大量的數(shù)據(jù)抽取和數(shù)據(jù)加載工作,單個處理節(jié)點已經(jīng)無法滿足用戶需求,通常需要多個處理節(jié)點共同完成大量的數(shù)據(jù)抽取和數(shù)據(jù)加載工作,即將數(shù)據(jù)抽取和數(shù)據(jù)加載工作分配到多個處理節(jié)點進行處理。
[0004]在處理節(jié)點進行數(shù)據(jù)抽取和數(shù)據(jù)加載的過程中,如果該處理節(jié)點發(fā)生故障,則會選擇一個新的處理節(jié)點,由新的處理節(jié)點代替發(fā)生故障的處理節(jié)點完成數(shù)據(jù)抽取和數(shù)據(jù)加載過程,從而保證數(shù)據(jù)抽取和數(shù)據(jù)加載的可靠性。
[0005]但是,在故障處理節(jié)點發(fā)生故障之前,可能已經(jīng)從源數(shù)據(jù)庫中抽取部分數(shù)據(jù),并將該部分數(shù)據(jù)加載到目標數(shù)據(jù)庫中。而新的處理節(jié)點并不清楚之前是否已經(jīng)有數(shù)據(jù)加載,也不清楚加載了多少數(shù)據(jù),因此,仍然從源數(shù)據(jù)庫中抽取所有數(shù)據(jù),并將所有數(shù)據(jù)加載到目標數(shù)據(jù)庫中。因此,目標數(shù)據(jù)庫中會加載重復的數(shù)據(jù),而這部分重復的數(shù)據(jù)對于目標數(shù)據(jù)庫來說是臟數(shù)據(jù)。
【發(fā)明內容】
[0006]本發(fā)明提供一種數(shù)據(jù)加載的方法,所述方法包括以下步驟:
[0007]處理節(jié)點獲得待處理的子任務,并確定所述子任務對應的待加載數(shù)據(jù);
[0008]所述處理節(jié)點從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù);
[0009]所述處理節(jié)點將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的臨時表中;
[0010]所述處理節(jié)點在所述子任務對應的所有待加載數(shù)據(jù)均加載到所述臨時表后,將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中。
[0011]所述處理節(jié)點將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的臨時表中之前,所述方法還包括:
[0012]所述處理節(jié)點與目標數(shù)據(jù)庫建立連接,并在所述目標數(shù)據(jù)庫中創(chuàng)建所述處理節(jié)點的臨時表,且所述處理節(jié)點的臨時表與其它處理節(jié)點的臨時表不同;
[0013]在所述處理節(jié)點將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中之后,所述處理節(jié)點刪除所述臨時表中的所有待加載數(shù)據(jù)。
[0014]所述臨時表具體為會話臨時表或者普通臨時表;其中,所述會話臨時表是指只在當前會話內有效的臨時表,在當前會話結束時,所述會話臨時表被所述目標數(shù)據(jù)庫刪除;所述普通臨時表是指持久存在的臨時表,所述普通臨時表需要由處理節(jié)點刪除。
[0015]所述處理節(jié)點從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù)之前,所述方法還包括:
[0016]所述處理節(jié)點在獲得待處理的子任務之后,如果所述子任務之前已經(jīng)被分配給其它處理節(jié)點,則所述處理節(jié)點判斷所述目標數(shù)據(jù)庫中是否存在所述子任務對應的普通臨時表;如果是,則所述處理節(jié)點刪除所述子任務對應的普通臨時表,并執(zhí)行從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù)的過程;
[0017]所述處理節(jié)點在將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中之后,如果所述處理節(jié)點在預設時間內未獲得新的待處理的子任務,則當所述處理節(jié)點在所述目標數(shù)據(jù)庫中創(chuàng)建的是普通臨時表時,則所述處理節(jié)點在斷開與所述目標數(shù)據(jù)庫的連接之前,刪除所述普通臨時表。
[0018]所述方法應用在包括多個處理節(jié)點的抽取轉換加載ETL調度集群系統(tǒng)。
[0019]本發(fā)明提供一種數(shù)據(jù)加載的裝置,所述數(shù)據(jù)加載的裝置應用在處理節(jié)點上,且所述數(shù)據(jù)加載的裝置具體包括:
[0020]獲得模塊,用于獲得待處理的子任務,并確定子任務對應的待加載數(shù)據(jù);
[0021]抽取模塊,用于從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù);
[0022]加載模塊,用于將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的臨時表中;
[0023]在所述子任務對應的所有待加載數(shù)據(jù)均加載到所述臨時表之后,則將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中。
[0024]還包括:處理模塊,用于在將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的臨時表中之前,與所述目標數(shù)據(jù)庫建立連接,并在所述目標數(shù)據(jù)庫中創(chuàng)建所述處理節(jié)點的臨時表,且所述處理節(jié)點的臨時表與其它處理節(jié)點的臨時表不同;
[0025]所述處理模塊,還用于在將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中之后,則刪除所述臨時表中的所有待加載數(shù)據(jù)。
[0026]所述臨時表具體為會話臨時表或者普通臨時表;其中,所述會話臨時表是指只在當前會話內有效的臨時表,在當前會話結束時,所述會話臨時表被所述目標數(shù)據(jù)庫刪除;所述普通臨時表是指持久存在的臨時表,所述普通臨時表需要由處理節(jié)點刪除。
[0027]所述處理模塊,還用于在從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù)之前,在獲得待處理的子任務之后,如果所述子任務之前已經(jīng)被分配給其它處理節(jié)點,則判斷所述目標數(shù)據(jù)庫中是否存在所述子任務對應的普通臨時表;如果是,則刪除所述子任務對應的普通臨時表,并由所述抽取模塊執(zhí)行從源數(shù)據(jù)庫中抽取所述子任務對應的待加載數(shù)據(jù)的過程;
[0028]所述處理模塊,還用于在將所述臨時表中的所有待加載數(shù)據(jù)復制到所述目標數(shù)據(jù)庫的目的表中之后,如果所述處理節(jié)點在預設時間內未獲得新的待處理的子任務,則當所述處理節(jié)點在所述目標數(shù)據(jù)庫中創(chuàng)建的是普通臨時表時,則在斷開與所述目標數(shù)據(jù)庫的連接之前,刪除所述普通臨時表。
[0029]所述裝置應用在包括多個處理節(jié)點的抽取轉換加載ETL調度集群系統(tǒng)。
[0030]基于上述技術方案,本發(fā)明實施例中,處理節(jié)點在處理子任務時,從源數(shù)據(jù)庫中抽取該子任務對應的待加載數(shù)據(jù),并先將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的臨時表中,而不是直接將抽取的待加載數(shù)據(jù)加載到目標數(shù)據(jù)庫的目的表中,只有在子任務對應的所有待加載數(shù)據(jù)均加載到臨時表之后,才會將臨時表中的所有待加載數(shù)據(jù)復制到目標數(shù)據(jù)庫的目的表中。當處理節(jié)點發(fā)生故障時,如果該處理節(jié)點還未將該子任務對應的所有待加載數(shù)據(jù)均加載到臨時表中,則說明該子任務對應的所有待加載數(shù)據(jù)均未加載到目的表中,通過刪除目標數(shù)據(jù)庫的臨時表,可以使得該子任務對應的所有待加載數(shù)據(jù)均未加載到目的表中。當新的處理節(jié)點處理該子任務時,可以將該子任務對應的所有待加載數(shù)據(jù)加載到目的表中,從而使得目標數(shù)據(jù)庫的目的表中不會加載到重復的數(shù)據(jù),解決了 ETL調度集群系統(tǒng)在故障恢復時,造成目的表的數(shù)據(jù)重復的問題,提高了 ETL調度集群系統(tǒng)的Failover (故障轉移)能力。
【附圖說明】
[0031]圖1是本發(fā)明一種實施方式中的應用場景示意圖;
[0032]圖2是本發(fā)明一種實施方式中的數(shù)據(jù)加載的方法的流程圖;
[0033]圖3是本發(fā)明一種實施方式中的處理節(jié)點的硬件結構圖;
[0034]圖4是本發(fā)明一種實施方式中的數(shù)據(jù)加載的裝置的結構圖。
【具體實施方式】
當前第1頁
1 
2 
3 
4