專利名稱:一種數據處理方法及其系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數據挖掘領域,尤其涉及一種數據處理方法及其系統(tǒng)。
背景技術:
近些年,隨著互聯網用戶的劇增,互聯網系統(tǒng)的訪問量越來越大,產生了大量數據。當前,許多企業(yè)利用這些數據來分析用戶的行為,從而預測市場前景??梢?,數據已經成為現代企業(yè)的重要資源,是企業(yè)運用科學管理、決策分析的基礎,目前,大多數企業(yè)花費大量的資金和時間來構建聯機事物處理的業(yè)務系統(tǒng)和辦公自動化系統(tǒng),用來記錄事物處理的各種相關數據。然而,對元數據進行處理是聯機分析處理、數據挖掘的基礎,因此,構建數據倉庫的過程一個極其重要的環(huán)節(jié)。在現有技術中,ETL (Extraction-Transformation-Loading)數據轉換方法被廣泛應用與數據倉庫的構建。如圖1所示,ETL能將分布的、異構數據源中的元數據抽取到臨時中間層后進行清洗、轉換、集成,最后加載到數據倉庫或數據集市中,構建了目標數據倉庫。目前比較成熟的 ETL 商業(yè)工具有 IBM Datastage、DTS 和 OracleWarehouseBuilder等,這些商業(yè)工具設計的初衷是幫助不具備計算機專業(yè)知識的用戶設計ETL作業(yè),從而都以元數據驅動的方式實現,這反而增加了這些商業(yè)工具的復雜性,其設計的復雜性直接或間接地導致了數據處理的效率低下和系統(tǒng)可擴展性差。由于商業(yè)工具一般都價格昂貴,很多小型企業(yè)都選擇開發(fā)自己的ETL工具,用以構建數據倉庫,然而自行開發(fā)的ETL工具維護成本相當高,一些開源工具的出現,在一定程度上彌補了這些問題,如KETL、Kettle、CloverETL等。然而,這些開源工具也都具有前述的商業(yè)工具中存在的問題。綜上所述,當前需要一種高效地、可擴展性強的方案來解決上述問題。
發(fā)明內容
本發(fā)明所要解決的技術問題之一是需要提供一種高效、可擴展性強的數據處理方法。為了解決上述技術問題,本發(fā)明提供了一種數據處理方法,該方法包括步驟一,將待處理的數據劃分為多個數據包;步驟二,對部分或全部數據包設定各自的數據處理過程;步驟三,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。根據本發(fā)明又一方面的數據處理方法,在所述步驟一中,根據設定模式將待處理的數據劃分為多個數據包,其中,所述設定模式為按時間劃分或按數據大小劃分。根據本發(fā)明又一方面的數據處理方法,所述步驟二進一步包括將所述各個設定的數據處理過程分別定義為各個數據處理作業(yè),其中,所述數據處理作業(yè)包括數據包的名稱和與所述數據包的數據處理過程中所包含的各步驟相對應的方法屬性。根據本發(fā)明又一方面的數據處理方法,在所述步驟三中,具體包括以下步驟分析并檢查所述各個數據處理作業(yè)的語法;根據所述數據處理作業(yè)中數據包的名稱,將語法正確的各個數據處理作業(yè)分發(fā)至與所述名稱相關聯的各個管道中;所述各個管道同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理,其中,所述各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。根據本發(fā)明又一方面的數據處理方法,所述數據處理過程設定為按照以下順序進行操作的前設定個步驟第一步進行設置步驟,該設置步驟執(zhí)行在對數據處理之前的初始化處理,其中,所述初始化處理包括建立數據庫表,并根據所述各個數據包的數量對所述數據庫表進行分區(qū)的操作;第二步進行抽取步驟,該抽取步驟將元數據抽取出來;第三步進行轉換步驟,該轉換步驟將抽取出來的元數據進行合并、清洗、分類、分揀和列檢索處理;第四步進行裝載步驟,該裝載步驟將執(zhí)行完所述轉換步驟后的數據加載至相應數據庫中;第五步進行拆卸步驟,該拆卸步驟處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計信息表。根據本發(fā)明又一方面的數據處理方法,采用插件的方式來設計各個數據處理作業(yè)。根據本發(fā)明又一方面的數據處理方法,所述管道在當前主機的一個線程中運行或在另一個主機的獨立的進程中運行。根據本發(fā)明又一方面的數據處理方法,還包括利用PERL語言中的Log4perl模塊,對所述管道調用相應的方法對該數據包中的數據進行處理的過程進行監(jiān)控。根據本發(fā)明的另一方面,還提供了一種數據處理系統(tǒng),包括劃分模塊,將待處理的數據劃分為多個數據包;設定模塊,對部分或全部數據包設定各自的數據處理過程;處理模塊,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。根據本發(fā)明又一方面的數據處理系統(tǒng),所述設定模塊進一步執(zhí)行將所述各個設定的數據處理過程分別定義為各個數據處理作業(yè),其中,所述數據處理作業(yè)包括數據包的名稱和與所述數據包的數據處理過程中所包含的各步驟相對應的方法屬性;在所述處理模塊進一步包括任務分析器,其分析并檢查所述各個數據處理作業(yè)的語法;任務分發(fā)器,根據所述數據處理作業(yè)中數據包的名稱,將語法正確的各個數據處理作業(yè)分發(fā)至與所述名稱相關聯的各個管道中;所述各個管道,同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理,其中,所述各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。與現有技術相比,本發(fā)明的一個或多個實施例可以具有如下優(yōu)點本發(fā)明通過將各個數據包的數據處理作業(yè)分發(fā)至不同的管道中獨立地執(zhí)行,使得能夠在各個管道中并行執(zhí)行各個數據包的數據處理,節(jié)省了大量的時間;而且,各個數據包的數據處理過程可以根據用戶的需要進行設定,對于不太重要的數據可以不進行,使得具有聞擴展性。本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權利要求書以及附圖中所特別指出的結構來實現和獲得。
附圖用來提供對本發(fā)明的進一步理解,并且構成說明書的一部分,與本發(fā)明的實施例共同用于解釋本發(fā)明,并不構成對本發(fā)明的限制。在附圖中:圖1是現有技術中ETL數據轉換方法的流程示意圖。圖2是根據本發(fā)明第一實施例的數據處理方法的流程示意圖;圖3是根據本發(fā)明第一實施例的數據處理方法中的在管道中處理數據的流程示意圖;圖4是根據本發(fā)明第二實施例的數據處理系統(tǒng)的結構示意圖;圖5是根據本發(fā)明第二實施例的數據處理系統(tǒng)中的數據處理模塊的結構示意圖;圖6是利用本發(fā)明的數據處理系統(tǒng)對數據進行處理的實驗結果示意圖;圖7是利用本發(fā)明的數據處理系統(tǒng)和開源工具KETTLE進行數據處理的對比示意圖。
具體實施例方式以下將結合附圖及實施例來詳細說明本發(fā)明的實施方式,借此對本發(fā)明如何應用技術手段來解決技術問題,并達成技術效果的實現過程能充分理解并據以實施。需要說明的是,只要不構成沖突,本發(fā)明中的各個實施例以及各實施例中的各個特征可以相互結合,所形成的技術方案均在本發(fā)明的保護范圍之內。
另外,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。第一實施例圖2是根據本發(fā)明第二實施例的數據處理方法的流程示意圖,下面參考圖2,詳細說明本發(fā)明方法的各個步驟。步驟S210,將待處理的數據劃分為多個數據包。具體地,將待處理的數據按照設定模式劃分為多個數據包,其中設定模式包括按時間劃分和按大小劃分的模式。例如,待處理的數據為某系統(tǒng)十小時的日志數據,將該日志數據按每個小時來劃分成十個數據包,將每個數據包存儲在一個壓縮包內,共得到十個壓縮包,各個數據包的名稱分別為 taskl、task2、…、tasklO。需要說明的是,現有技術的數據處理是將待處理的數據作為一個整體(不考慮該整體的大小)進行數據處理,即是一個端到端的過程。而本實施例在進行數據處理之前,需要將待處理的數據劃分(或分區(qū))為多個數據包,后續(xù)根據需要設定部分或所有數據包的數據處理過程,并將各個數據處理過程定義為各個數據處理作業(yè),然后再對定義的數據處理作業(yè)進行處理。這樣,在對分區(qū)后的數據進行處理時,既可以避免數據的重復處理,又可以加速數據的處理過程和查詢操作。步驟S220,對部分或全部數據包設定數據處理過程。
本步驟以PERL語言為例來實現數據處理。具體地,需要將各個數據處理過程分別定義為各個數據處理作業(yè)(以下簡稱作業(yè)),其中,各個數據處理作業(yè)包括各個數據包的名稱和與各個數據處理過程中各個步驟對應的方法屬性?,F有技術中ETL方法的整個數據處理過程包括以下步驟:抽取、轉換和裝載。在本發(fā)明實施例中,完整的數據處理過程按照設置、提取、轉換、裝載和拆卸的順序來實現數據的處理。其中,設置步驟執(zhí)行在對數據處理之前的初始化處理,初始化處理包括建立數據庫表,并根據各個數據包的數量對數據庫表進行分區(qū);拆卸步驟,處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計信息表。其他的步驟與ETL方法中涉及到的步驟大體相同,在此不作贅述。在根據需要對部分或全部的數據包設定數據處理過程時,可以設定為按照以下順序進行操作的前設定個步驟:第一步進行設置步驟,執(zhí)行在對數據處理之前的初始化處理;第二步進行抽取步驟,將元數據抽取出來;第三步進行轉換步驟,將抽取出來的元數據進行合并、清洗、分類、分揀和列檢索處理;第四步進行加載步驟,將轉換后的數據加載至相應數據庫中;第五步進行拆卸步驟,處理后續(xù)操作。即,具體包括以下幾種數據處理過程:(1)設置;(2)設置一提??;(3)設置一提取一轉換;(4)設置一提取一轉換一裝載;(5)設置一提取一轉換一裝載一拆卸。這樣可以按需設定部分或全部數據包所要執(zhí)行的數據過程,針對不重要的數據可以省略掉多個處理步驟或不進行數據處理,節(jié)省了大量的時間,提高了數據處理過程的靈活性。本實施例優(yōu)選地,采用插件的方式來設計數據處理作業(yè)。這樣,一個作業(yè)可以插入到該系統(tǒng)中,也可以從該系統(tǒng)中卸載,使得本系統(tǒng)的結構簡單,保證了數據處理效率。每一個作業(yè)都可以順序定義設置(Setup)、提取(Extract)、轉換(Transform)、裝載(Load)和拆卸(Teardown)這五個方法屬性中的前幾個方法屬性,對應各個方法屬性的表現形式可如下所示:Sub method_name: Setup (qw (task_namel,...))Sub method_name: Extract (qw (task_namel,...))Sub method_name:Transfor (qw(task_namel,...))Sub method_name: Load (qw (task_namel,...))Sub method_name: Teardown (qw (task_namel,...))其中,method_name是一個Perl名稱,只需要符合Perl語言方法命名規(guī)則即可;Setup是方法屬性,表示該Setup方法將在數據處理過程中第一步調用,其它的屬性類似;qw (task_namel,…)是屬性的值(也是作業(yè)的名稱),表示該方法屬于哪些作業(yè)。一般,不推薦讓一個方法屬于多個不同的任務(不同的作業(yè)),因為若一個方法屬于多個不同的任務會使整個作業(yè)邏輯變得復雜。因此,在本發(fā)明中,優(yōu)選地,使一個方法只屬于一個作業(yè)。例如,可以將上述例子中的名稱為taskl的數據包的作業(yè)定義為:Taskl:-sub stepl:Setup(taskl) O-sub step2: Extract (taskl)()
-sub step3: Transform (taskl)()
-sub step4: Load (taskl)()-sub step5: Teardown (taskl)()還可以定義為Taskl -sub stepl: Setup (taskl)()-sub step2: Extract (taskl)()-sub step3: Transform (taskl)()通過這樣的定義,系統(tǒng)能統(tǒng)計有哪些作業(yè)需要運行及與該作業(yè)所要執(zhí)行數據處理過程相關聯的方法。步驟S230,分析并檢查各個數據處理作業(yè)的語法。具體地,基于預先定義的語法來檢查各個數據處理作業(yè)的語法,若與之前定義的語法一致,則判斷該數據處理作業(yè)的語法正確,否則,判斷為錯誤。在本實施例中,利用PERL語言的方法屬性處理器(Perl AttributeHandler)定義了五種PERL語言方法屬性的語法,分別為Sub Setup:ATTR(CODE) {};Sub Extract: ATTR (CODE) {};Sub Transfor: ATTR (CODE) {};Sub Load:ATTR(CODE) {};Sub T ear down: ATTR (CODE) {};若作業(yè)與上述定義的語法一致,則判斷該作業(yè)的語法是正確的,否則,判斷結果為該作業(yè)的語法是錯誤的。例如某作業(yè)的一個方法屬性定義如下sub"step2 Extract (task5) O ,通過對其語法、語義檢查,所得到的檢查結果錯誤。這是因為根據PERL語言的方法屬性處理器,方法名只能由英文字母(大小寫)、數字和下劃線的組合。步驟S240,根據數據處理作業(yè)中數據包的名稱,將語法正確的各個數據處理作業(yè)分發(fā)至與名稱相關聯的各個管道中。其中,各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。也就是說,在本發(fā)明實施例中,將待處理數據劃分為多少個數據包,則預先設定多少個管道,且各個管道定義了名稱屬性和方法屬性,例如etl pipeline=etl job。管道的定義同作業(yè)的定義,如ETL作業(yè)taskl定義如下-sub stepl: Setup (taskl) {}-sub step2: Extract (taskl) {}-sub step3: Transform (taskl) {}-sub step4: Load (taskl) {}-sub step5: Teardown (taskl) {}taskl作業(yè)定義了這5個方法,則會將該作業(yè)分發(fā)至管道的屬性值為“taskl”的管道中,該管道會調用上述五個方法的代碼,調用次序為:stepl->step2->step3->step4->step5,然后這個調用過程就叫做pipeline,屬性值對應taskl。又如ETL作業(yè)task2定義如下:-sub stepl:Setup(task2){}-sub step2: Extract (task2) {}-sub step3: Transform (task2) {}-sub step4: Load (task2) {}-sub step5: Teardown (task2) {}那就多了一個pipeline,屬性值對應task2。每個管道可以在當前的一個線程中運行,也可以在另一個主機上的一個獨立進程中運行。這樣可以提高整體數據的數據處理效率,且不同任務之間互不干擾,在去掉一個已有作業(yè)或增加一個新的作業(yè)時都不會影響到其它正常作業(yè)的運行,實現了可擴展性。步驟S250,各個管道同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理。例如,作業(yè)Taskl 定義了 Setup () > Extract () > Transform () > Load () > Teardown ()五個屬性,則執(zhí)行該作業(yè)的管道中定義的方法屬性為SetupO、Extract O、TransformO、Load O, TeardownO五種方法屬性,該管道中定義的該方法語法信息會被當作參數傳入與其屬性相對應的屬性定義方法中,也就是該管道通過將其語法信息作為參數來調用上述五種方法屬性對應的方法處理。語法信息包括:該方法所在類名,包含該方法的符號表引用,該方法的引用,方法屬性的名稱,屬性的數據,該方法觸發(fā)屬性處理器的階段,屬性處理器所在文件及在該文件的行號。例如,語法信息可以表示如下:
1.use Attribute::Handlers;
2.
3.sub Setup:ATTR {
4.my ($package.$symbol, $refereni, $attr, $data, $phase,
5.$ filename, $linenum)=@_;
6.}如果用戶定義了如下方法:Package ETLJob;Sub stepl:Setup(taskl){}那么會把stepl方法的語法信息傳遞給Setup屬性的定義函數,那么package的值為”ETLJob”,即stepl方法定義所在的包;symbol為符號表的引用;referent為stepl方法的引用;attr為屬性Setup的數據,這里為taskl ;phase是指stepl在編譯處理的那個階段被調用filename是Setup屬性定義的文件名;Iinenum是Setup屬性定義所在文件的行號。需要說明的是,若一個數據包的數據處理過程沒有設置第四步驟,即沒有設置裝載步驟,那么就不會生成相應的數據表。若想要生成待處理數據的所有數據包的數據表,則需要在設定各個數據包的數據處理過程時,至少要設定到第四步驟。對于任一個作業(yè)來說,將其放入至與其關聯的管道中運行,這相當于將作業(yè)當作插件插入至本系統(tǒng)中,即使新的作業(yè)有語法、功能等錯誤,也不會影響到它的運行。也可以指定只運行某些作業(yè),這相當于把另外一些不需要處理的作業(yè)當作插件從本系統(tǒng)中卸載掉,從而使得本系統(tǒng)具有高擴展性。圖3是根據本發(fā)明第一實施例的數據處理方法中的在管道中處理數據的流程示意圖,具體地,根據作業(yè)的方法屬性定義,如某作業(yè)只定義了 setup屬性,則其運行級別為I,若定義了 setupO、extract O屬性,貝U運行級別為2,依次類推,上述作業(yè)“taskl”的運行級別為5,因此根據圖3所示,在執(zhí)行taskl的數據處理過程時,需要一次調用設置(Setup)、提取(Extract)、轉換(Transform)、裝載(Load)和拆卸(Teardown)等方法。需要說明的是,上述步驟S230至步驟S250是根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理的基于PERL語言的詳細步驟,還可以使用其他的語言來實行。另外,在本系統(tǒng)中,還可以米用Log4perl模塊輸出每個管道的每一步運行日志,并在此基礎上實現了基于日志分析的監(jiān)控系統(tǒng)。從而能夠實時監(jiān)控線上系統(tǒng)運行情況,例如系統(tǒng)中的每一個作業(yè)所花費的時間等。第二實施例圖4是根據本發(fā)明第一實施例的數據處理系統(tǒng)的結構示意圖,下面參考圖4來詳細說明本系統(tǒng)的各個組成部分。該系統(tǒng)包括劃分模塊41、設定模塊42和處理模塊43。其中,劃分模塊41,將待處理的數據劃分為多個數據包;設定模塊42,對部分或全部數據包設定各自的數據處理過程;處理模塊43,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。需要說明的是,現有技術的數據處理是將待處理的數據作為一個整體(不考慮該整體的大小)進行數據處理,即是一個端到端的過程。而本實施例在進行數據處理之前,需要將待處理的數據劃分(或分區(qū))為多個數據包(即上述劃分模塊),后續(xù)根據需要設定部分或所有數據包的數據處理過程(即上述設定模塊),并將各個數據處理過程定義為各個數據處理作業(yè),然后再對定義的數據處理作業(yè)進行處理。這樣,在對分區(qū)后的數據進行處理時,既可以避免數據的重復處理,又可以加速數據的處理過程和查詢操作。劃分模塊41根據設定模式將待處理的數據劃分為多個數據包,其中,設定模式可以為按時間劃分或按數據大小劃分。例如,劃分模塊41將一個待處理的數據(共五個小時的數據)按照每小時來劃分,可以得到5個數據包,各個數據包的名稱分別為taskl、task2、task3、task4和task5?,F有技術中ETL方法的整個數據處理過程包括以下步驟抽取、轉換和裝載。在本發(fā)明實施例中,完整的數據處理過程包括設置、提取、轉換、裝載和拆卸這五個步驟。其中,設置步驟執(zhí)行在對數據處理之前的初始化處理,初始化處理包括建立數據庫表,并根據各個數據包的數量對數據庫表進行分區(qū);拆卸步驟,處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計信息表。設定模塊42在根據需要對部分或全部的數據包設定數據處理過程時,可以設定為按照以下順序進行操作的前設定個步驟第一步進行設置步驟,執(zhí)行在對數據處理之前的初始化處理;第二步進行抽取步驟,將元數據抽取出來;第三步進行轉換步驟,將抽取出來的元數據進行合并、清洗、分類、分揀和列檢索處理;第四步進行加載步驟,將轉換后的數據加載至相應數據庫中;第五步進行拆卸步驟,處理后續(xù)操作。即,具體包括以下幾種數據處理過程(I)設置;(2)設置一提?。?3)設置一提取一轉換;(4)設置一提取一轉換一裝載;(5)設置一提取一轉換一裝載一拆卸。這樣可以按需設定部分或全部數據包所要執(zhí)行的數據過程,針對不重要的數據可以省略掉多個處理步驟或不進行數據處理,節(jié)省了大量的時間,提高了數據處理過程的靈活性。在本發(fā)明實施例中,說明以PERL語言來實現的處理模塊43,但本實施例僅為一個示例。另外,設定模塊42進一步執(zhí)行將各個設定的數據處理過程分別定義為各個數據處理作業(yè),其中,所述數據處理作業(yè)包括數據包的名稱和與所述數據包的數據處理過程中所包含的各步驟相對應的方法屬性。本實施例優(yōu)選地,設定模塊42采用插件的方式來設計數據處理作業(yè)。這樣,一個作業(yè)可以插入到該系統(tǒng)中,也可以從該系統(tǒng)中卸載,使得本系統(tǒng)的結構簡單,保證了數據處
理效率。數據處理作業(yè)包括數據包的名稱和與數據包的數據處理過程中各個步驟相對應的方法屬性。每一個作業(yè)都可以順序定義設置(Setup)、提取(Extract)、轉換(Transform)、裝載(Load)和拆卸(Teardown)這五個方法屬性中的前幾個方法屬性,對應各個方法屬性的表現形式可如下所示Sub method_name: Setup (qw (task_namel, ···))Sub method_name: Extract (qw (task_namel, ···))Sub method_name:Transfor (qw(task_namel, ···))Sub method_name: Load (qw (task_namel, ...))Sub method_name: Teardown (qw (task_namel, ···))其中,method_name是一個Perl名稱,只需要符合Perl語言方法命名規(guī)則即可;Setup是方法屬性,表示該Setup方法將在數據處理過程中第一步調用,其它的屬性類似;qw(task_namel, ···)是屬性的值(也是作業(yè)的名稱),表示該方法屬于哪些作業(yè)。一般,不推薦讓一個方法屬于多個不同的任務(不同的作業(yè)),因為若一個方法屬于多個不同的任務會使整個作業(yè)邏輯變得復雜。因此,在本發(fā)明中,優(yōu)選地,使一個方法只屬于一個作業(yè)。例如,可以將上述例子中的名稱為taskl的數據包的作業(yè)定義為Taskl -sub stepl:Setup(taskl) O-sub step2: Extract (taskl)()
-sub step3: Transform (taskl)()-sub step4: Load (taskl)()-sub step5: Teardown (taskl)()通過這樣的定義,系統(tǒng)能統(tǒng)計有哪些作業(yè)需要運行及與該作業(yè)所要執(zhí)行數據處理過程相關聯的方法。如圖5所示,處理模塊43主要包括任務分析器、任務分發(fā)器和管道三個部分。任務分析器,用于分析并檢查所定義的的各個數據處理作業(yè)(可簡稱“作業(yè)”)的語法和語義。任務分析器是基于PERL語言的方法屬性處理器(Perl Attribute Handler)實現。PERL語言的方法屬性處理器能在編譯過程中BEGIN、CHECK、INIT和END中的某一階段觸發(fā),從而實現在系統(tǒng)編譯期對用戶定義的作業(yè)進行分析。在任務分析器中,定義了五種PERL語言方法屬性的語法,分別為Sub Setup:ATTR(CODE) {};Sub Extract: ATTR (CODE) {};Sub Transfor: ATTR (CODE) {};Sub Load:ATTR(CODE) {};Sub T ear down: ATTR (CODE) {};任務分析器通過上述定義的語法對各個數據處理作業(yè)進行語法檢查,若作業(yè)與上述定義的語法一致,則判斷該作業(yè)的語法是正確的,否則,判斷結果為該作業(yè)的語法是錯誤的。任務分發(fā)器收集所有語法正確的作業(yè),根據各個作業(yè)中的數據包的名稱,將語法正確的各個作業(yè)分發(fā)到不同的管道中去執(zhí)行。各個管道同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理。需要說明的是,各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。每個管道可以在當前的一個線程中運行,也可以在另一個主機上的一個獨立進程中運行。這樣可以提高整體數據的數據處理效率,且不同任務之間互不干擾,在去掉一個已有作業(yè)或增加一個新的作業(yè)時都不會影響到其它正常作業(yè)的運行,實現了可擴展性。對于任一個作業(yè)來說,將其放入至與其關聯的管道中運行,這相當于將作業(yè)當作插件插入至本系統(tǒng)中,即使新的作業(yè)有語法、功能等錯誤,也不會影響到它的運行。也可以指定只運行某些作業(yè),這相當于把另外一些不需要處理的作業(yè)當作插件從本系統(tǒng)中卸載掉,從而使得本系統(tǒng)具有高擴展性。另外,在本系統(tǒng)中,還可以采用Log4perl模塊輸出每個管道的每一步運行日志,并在此基礎上實現了基于日志分析的監(jiān)控系統(tǒng)。從而能夠實時監(jiān)控線上系統(tǒng)運行情況,例如系統(tǒng)中的每一個作業(yè)所花費的時間等。下面以一個示例來進一步說明本發(fā)明的優(yōu)點和特征。示例現有某系統(tǒng)十小時的日志數據,每個小時的數據存儲在一個壓縮包內,每個壓縮包大約900M (共十個壓縮包),每個壓縮包有一千一百萬條記錄,以二進制文本存儲。每個記錄以 object_id, object_type, interval_start 為主鍵現需要將 object_type 特定值的數據加載到數據庫中?,F根據需求設計每個數據包的數據處理過程包括以下步驟:(I) Setup步驟:主要負責處理執(zhí)行傳統(tǒng)ETL步聚前需要做的初始化操作,如建立數據庫表、對數據庫表進行分區(qū)、準備源數據等。由于數據量較大,因此可以將數據按時間(interval_start)加以分區(qū),譬如:一個小時一個分區(qū)。數據的分區(qū)對應于數據庫中表的分區(qū),這樣做的目的是既可以避免數據的重復處理,又可以加速數據的加載過程和查詢操作,
數據庫表分區(qū)定義為:
CREATE TABLE test—taWe (
object id int unsigned NOT NULL,object—type int unsigned NOT NULL,interval—start mediuinint NOT NULL,
PRIMARY KEY(object—id, interval—start)
)ENGI N E=InnoDBDEFA U LTCHA RS ET=UtfB COLLATE=UtfBgeneralci
PARTITION BY RANGE(intervai_start,)
(
PARTITION zero VALUES LESS THAN (I),
PARTITION VALUES LESS THAN (1000),
PARTITION VALUES LESS THAN (1001)
PARTITION fiiture VAII FS LESS THAN MAXVALUE`);(2) Extract步驟:主要負責將異構數據源如二進制文件、數據庫表等抽取出來,統(tǒng)一文本方式存儲,便于后繼步聚的合并、清洗、分類、分揀和列檢索等操作。抽取的方法通常依賴于源數據的具體結構,這里為上述二進制文件設計了單獨的抽取工具。只需要在該過程中調用該工具即可,該工具將抽取出來的數據以CSV文本格式存儲。(3) Transform步驟:主要負責將抽取出來的數據進行合并、清洗、分類、分揀和列檢索等處理,形成最終能直接加載到目標數據庫的文本文件。這一步中既可以編寫具體系統(tǒng)相關的高效轉換工具,也可以用已有的文本處理工具sed、awk、grep (其實這些工具已相當高效)等來分析抽取出來的CSV文本文件。這里采用awk進行數據轉換,如過濾掉ob ject_type為” test”的記錄并統(tǒng)計與上一個小時除主鍵外的其它域發(fā)生變化的object個數,其中第一、二、三個域為記錄主鍵。awk-F, ARGIND==I {\key=$l", "$2","$3;fl[key]=$4;f2[key]=$5;f3[key]=$6;f4[key]=$7;f5[key]=$8;f6[key]=$9;}\ARGIND>1&&($2!= “test”){if(fI[key2]!=$4| |f2[key2]!=$5| |f3[key2]!=$6I f4[key2]!=$7 f5[key2]!=$8f6[key2]!=$9){shifts++}}END{print$0", "shifts}filel file2(4) Load步驟:直接將轉換后的數據文件加載到相應數據庫中即可。在加載過程中,由于多數SQL語句效率不高,因此應盡量避免SQL語句操作。由于本系統(tǒng)的轉換后得到
的數據文件跟數據庫中的表是--對應的,因此可以用Mysql的內建函數1addata來加載
數據文件,實驗表明這樣的加載方法是最高效的,比INSERT語句快二十倍:LOAD DATA ‘file_name’INTO TABLE tab_nameFIELDS TERMINATED BY' , ' ENCLOSED BY""LINES TERMINATED BY ‘\n’(5) Teardown步驟:負責處理后續(xù)事宜,如刪除無用文本文件、生成一些統(tǒng)計信息表以方便用戶查詢等。從以上作業(yè)的示例可以看出,在本系統(tǒng)中只需定義上述幾個步驟對應的方法即可,每個步驟對應的方法實現相當靈活,可以借助已有的sed、awk和grep等高效的文本處理工具,這大大減少了設計作業(yè)的工作量。為了測試本系統(tǒng)的性能,分別用本系統(tǒng)和開源工具KETTLE對上述十小時的日志數據進行數據處理:采用本系統(tǒng)運行作業(yè)十次,每次加載一個小時的數據,每小時數據有一千一百萬條記錄,運行任務過程中記錄每一步所花費的時間,實驗結果如圖6所示。分別用開源工具KETTLE和本系統(tǒng)(假設稱為SETL)運行作業(yè)十次,每次加載一個小時數據,每小時數據有一千一百萬條記錄,記錄該十個作業(yè)分別在Kettle和本系統(tǒng)中運行所需時間,實驗結果如圖7所示。從圖6可以看出本系統(tǒng)具有較高效率,一千多萬條數據加載在80秒內便能處理完畢,且大部分時間花費在數據轉換這一步,這一步是由轉換規(guī)則的復雜性決定的;從圖7的對比可以看出,本系統(tǒng)比開源工具Kettle具有更高的執(zhí)行效率。
本實施例的數據處理系統(tǒng),通過任務分發(fā)器將各個數據包的數據處理作業(yè)分發(fā)至不同的管道中獨立地執(zhí)行,使得能夠在各個管道中并行執(zhí)行各個數據包的數據處理,節(jié)省了大量的時間;而且,各個數據包的數據處理過程可以根據用戶的需要進行設定,對于不太重要的數據可以不進行,使得本系統(tǒng)具有高擴展性。本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。雖然本發(fā)明所揭露的實施方式如上,但所述的內容只是為了便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術領域內的技術人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的形式上及細節(jié)上作任何的修改與變化,但本發(fā)明的專利保護范圍,仍須以所附的權利要求書所界定的范圍為準。
權利要求
1.一種數據處理方法,其特征在于,包括: 步驟一,將待處理的數據劃分為多個數據包; 步驟二,對部分或全部數據包設定各自的數據處理過程; 步驟三,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。
2.根據權利要求1所述的數據處理方法,其特征在于,在所述步驟一中, 根據設定模式將待處理的數據劃分為多個數據包,其中, 所述設定模式為按時間劃分或按數據大小劃分。
3.根據權利要求1所述的數據處理方法,其特征在于,所述步驟二進一步包括: 將所述各個設定的數據處理過程分別定義為各個數據處理作業(yè),其中, 所述數據處理作業(yè)包括數據包的名稱和與所述數據包的數據處理過程中所包含的各步驟相對應的方法屬性。
4.根據權利要求3所述的數據處理方法,其特征在于,在所述步驟三中,具體包括以下步驟: 分析并檢查所述各個數據處理作業(yè)的語法; 根據所述數據處理作業(yè)中數據包的名稱,將語法正確的各個數據處理作業(yè)分發(fā)至與所述名稱相關聯的各個管道中; 所述各個管道同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理,其中, 所述各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。
5.根據權利要求4所述的數據處理方法,其特征在于,所述數據處理過程設定為按照以下順序進行操作的前設定個步驟: 第一步進行設置步驟,該設置步驟執(zhí)行在對數據處理之前的初始化處理,其中,所述初始化處理包括建立數據庫表,并根據所述各個數據包的數量對所述數據庫表進行分區(qū)的操作; 第二步進行抽取步驟,該抽取步驟將元數據抽取出來; 第三步進行轉換步驟,該轉換步驟將抽取出來的元數據進行合并、清洗、分類、分揀和列檢索處理; 第四步進行裝載步驟,該裝載步驟將執(zhí)行完所述轉換步驟后的數據加載至相應數據庫中; 第五步進行拆卸步驟,該拆卸步驟處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計信息表。
6.根據權利要求3至5中任一項所述的數據處理方法,其特征在于, 采用插件的方式來設計各個數據處理作業(yè)。
7.根據權利要求4或5所述的數據處理方法,其特征在于, 所述管道在當前主機的一個線程 中運行或在另一個主機的獨立的進程中運行。
8.根據權利要求7所述的數據處理方法,其特征在于,還包括: 利用PERL語言中的Log4perl模塊,對所述管道調用相應的方法對該數據包中的數據進行處理的過程進行監(jiān)控。
9.一種數據處理系統(tǒng),其特征在于,包括: 劃分模塊,將待處理的數據劃分為多個數據包; 設定模塊,對部分或全部數據包設定各自的數據處理過程; 處理模塊,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。
10.根據權利要求9所述的數據處理系統(tǒng),其特征在于,所述設定模塊進一步執(zhí)行: 將所述各個設定的數據處理過程分別定義為各個數據處理作業(yè),其中, 所述數據處理作業(yè)包括數據包的名稱和與所述數據包的數據處理過程中所包含的各步驟相對應的方法屬性; 在所述處理模塊進一步包括: 任務分析器,其分析并檢查所述各個數據處理作業(yè)的語法; 任務分發(fā)器,根據所述數據處理作業(yè)中數據包的名稱,將語法正確的各個數據處理作業(yè)分發(fā)至與所述名稱相關聯的各個管道中; 所述各個管道,同時根據各個作業(yè)中的方法屬性,調用相應的方法對該數據包中的數據進行處理,其中, 所述各個管道為預先設定的針對各個數據包的數據處理過程的調用方法的函數,預先設定的管道的數量與將待處理的數據劃分后的數據包的數量相同。
全文摘要
本發(fā)明公開了一種數據處理方法,該方法包括步驟一,將待處理的數據劃分為多個數據包;步驟二,對部分或全部數據包設定各自的數據處理過程;步驟三,根據各個設定的數據處理過程,同時分別對各個數據包中的數據進行處理。本發(fā)明通過將各個數據包的數據處理作業(yè)分發(fā)至不同的管道中獨立地執(zhí)行,使得能夠在各個管道中并行執(zhí)行各個數據包的數據處理,節(jié)省了大量的時間;而且,各個數據包的數據處理過程可以根據用戶的需要進行設定,對于不太重要的數據可以不進行,使得具有高擴展性。
文檔編號G06F17/30GK103077192SQ201210568419
公開日2013年5月1日 申請日期2012年12月24日 優(yōu)先權日2012年12月24日
發(fā)明者田媛媛 申請人:中標軟件有限公司