專利名稱:一種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法。
背景技術(shù):
目前,在對(duì)數(shù)據(jù)處理過程中最方便、快捷、易用的軟件應(yīng)該是微軟的Excel。它在 當(dāng)今世界上廣泛用來做數(shù)據(jù)的存儲(chǔ)、數(shù)據(jù)的簡(jiǎn)單運(yùn)算以及數(shù)據(jù)的展示,因此在對(duì)數(shù)據(jù)的ETL 過程中,應(yīng)該也必須包括對(duì)Excel進(jìn)行支持。不過也正因?yàn)镋xcel應(yīng)用廣泛,格式多樣化, 導(dǎo)致了大部分支持Excel數(shù)據(jù)ETL的方法都只是簡(jiǎn)單的支持標(biāo)固定格式的Excel文檔數(shù)據(jù) ETL,這些方法缺乏有效的靈活性和適用性。
發(fā)明內(nèi)容
本發(fā)明的目的就是針對(duì)上述的不足,提供了 一種基于開源JavaAp i上的 InfoSib-ExcelSource和InfoSib-ExcelSink構(gòu)件,采用對(duì)文件增量和文件內(nèi)容全量進(jìn)行 抽取,而且還支持對(duì)指定部分的文件內(nèi)容進(jìn)行抽??;支持一般和特殊格式文件的分開抽??; 支持文件過濾、Sheet表單過濾及數(shù)據(jù)列過濾;支持Excel到Excel 、Excel到數(shù)據(jù)庫及數(shù)據(jù) 庫到Excel ;支持遠(yuǎn)程Excel數(shù)據(jù)抽??;支持一次配置多次運(yùn)行;支持實(shí)時(shí)、定時(shí)及觸發(fā)三 種抽取模式的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法。 —種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,獲取并解析source和sink端 的配置信息,并行啟動(dòng)多個(gè)線程分別用于讀取source端excel文件內(nèi)容、發(fā)送封裝后的 Data0bject對(duì)象和sink接收獲得的Data0bject對(duì)象進(jìn)行處理,并最后寫入excel文件。
上述獲取并解析source和sink端的配置信息的步驟為獲取source端的xbean. xml文件,并解析出對(duì)應(yīng)的配置信息;獲取sink端的xbean. xml文件,并解析出對(duì)應(yīng)的配置 信息。 優(yōu)選的,按照下列步驟進(jìn)行并行啟動(dòng)多個(gè)線程分別用于讀取source端excel文件 內(nèi)容、發(fā)送封裝后的Data0bject對(duì)象和sink接收獲得的Data0bject對(duì)象進(jìn)行處理,并最 后寫入excel文件的操作 啟動(dòng)source端讀取線程,循環(huán)讀取基礎(chǔ)目錄File0b ject對(duì)象下面符合抽取規(guī)則 的Excel文件,并將內(nèi)容封裝成若干個(gè)Data0bject對(duì)象送入發(fā)送隊(duì)列中;
啟動(dòng)發(fā)送線程,循環(huán)讀取發(fā)送隊(duì)列中的DataObject對(duì)象,并發(fā)送到InforSib總線 容器; 啟動(dòng)sink端處理線程,監(jiān)聽I(yíng)nforSib總線;當(dāng)Data0bject從InforSib總線到達(dá)
sink端時(shí),處理線程將調(diào)用process方法來接接收Data0b ject并準(zhǔn)備處理。 優(yōu)選的,按照下列步驟來獲取source端配置文件 解析source端xbean. xml文件,獲取Source端配置信息; 通過解析Xml文件,獲得配置信息中的r皿Mode項(xiàng)內(nèi)容來確定抽取模式是實(shí)時(shí)或 定時(shí)或觸發(fā);
根據(jù)Xml中的remoteFile項(xiàng)配置信息,判斷是進(jìn)行遠(yuǎn)程還是本地的Excel文件數(shù)據(jù)抽取,如果是遠(yuǎn)程文件,則使用遠(yuǎn)程方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象,如果是本地文件,則使用本地方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象; 根據(jù)獲得的配置內(nèi)容,取出跟抽取動(dòng)作有關(guān)的信息,生成抽取規(guī)則,開始按抽取規(guī)
則對(duì)FileObject對(duì)象下面的Excel文件進(jìn)行抽取。 優(yōu)選的,Source按照如下步驟進(jìn)行讀取excel文件內(nèi)容操作 啟動(dòng)讀取線程,循環(huán)讀取基礎(chǔ)目錄FileObject對(duì)象下面符號(hào)抽取規(guī)則的Excel文
件,并將文件的數(shù)據(jù)寫入內(nèi)存; 按照抽取規(guī)則,將內(nèi)存中的Excel內(nèi)容寫入Document對(duì)象中; 將生成的Document對(duì)象按照抽取規(guī)則中設(shè)置的包數(shù)目大小和包字節(jié)大小封裝成
Data0bject對(duì)象,并放入發(fā)送線程的發(fā)送隊(duì)列中。 優(yōu)選的,按照如下步驟獲得sink端配置信息 解析Sink端配置信息文件xbean. xml,獲取excel目的端文件路徑,解析xbean.xml中的內(nèi)容,獲取sink端所使用的excel文件路徑、excel sheet及其他信息;
根據(jù)解析xbean. xml得到的excel文件路徑,判斷該路徑是否為本地路徑還是為遠(yuǎn)程路徑; 如果獲取的excel路徑為遠(yuǎn)程路徑,則判斷該遠(yuǎn)程的excel文件是否已經(jīng)存在或不存在,如果不存在則創(chuàng)建該文件; 如果獲取的excel路徑為本地路徑,則判斷該本地excel文件是否已經(jīng)存在或不存在,如果不存在則創(chuàng)建該文件; 自動(dòng)載入已經(jīng)存在或則創(chuàng)建的excel文件到內(nèi)存當(dāng)中。
優(yōu)選的,Sink端按照如下步驟進(jìn)行接收和處理操作 sink端啟動(dòng)處理線程,監(jiān)聽I(yíng)nforSib總線;當(dāng)Data0bject從InforSib總線到達(dá)sink端時(shí),處理線程將調(diào)用process方法來接接收Data0b ject并準(zhǔn)備處理;
sink端處理線程,接收到Data0bject后,將從Data0bject解析出excel結(jié)構(gòu),excel數(shù)據(jù),excel數(shù)據(jù)格式信息; sink端處理線程,按照xbean中的獲得excel文件、excel sheet,將從Data0b ject中解析出的excel數(shù)據(jù),按照追加方式把excel數(shù)據(jù)保存到excel文件中。
本發(fā)明提供的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,具有如下優(yōu)點(diǎn)
1.無需編程,現(xiàn)有編程人員可以將時(shí)間花費(fèi)在更有價(jià)值的項(xiàng)目上。公司可以利用遺留系統(tǒng)并跨所有支持的平臺(tái)整合數(shù)據(jù),無需對(duì)現(xiàn)有環(huán)境進(jìn)行更改??梢暂p松地適應(yīng)計(jì)算環(huán)境中未來的變更,以使您的投資能適應(yīng)未來。 2.適用范圍廣,基本上涵蓋了所有Excel文件數(shù)據(jù)的ETL需求,并且能夠?qū)崿F(xiàn)Excel到Excel、 Excel到數(shù)據(jù)庫和數(shù)據(jù)庫到Excel 。 3.靈活性強(qiáng),既可以進(jìn)行一般整體性的Excel數(shù)據(jù)ETL也可以對(duì)特殊的Excel進(jìn)行ETL,而且還可以進(jìn)行實(shí)時(shí)、定時(shí)和觸發(fā)等多種模式。 4.操作簡(jiǎn)單,對(duì)大部Excel文件都不需要進(jìn)行更多的配置,就能進(jìn)行想要的數(shù)據(jù)ETL,對(duì)特殊格式的Excel文件,也能很容易的在層級(jí)的配置界面中輕松實(shí)現(xiàn)。
圖1是本發(fā)明實(shí)施例的流程圖。
具體實(shí)施例方式
下面以非限定性的實(shí)施方式對(duì)本發(fā)明做進(jìn)一步解釋、說明。 —種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,如圖l所示,本方法開始于步驟101,解析Xml文件,獲取Source端配置信息。 然后進(jìn)入步驟102,通過解析Xml文件,獲得配置信息中的r皿Mode項(xiàng)內(nèi)容來確定抽取模式是實(shí)時(shí)或定時(shí)或觸發(fā)。 在步驟103,根據(jù)Xml中的remoteFile項(xiàng)配置信息,判斷是進(jìn)行遠(yuǎn)程還是本地的Excel文件數(shù)據(jù)抽取,如果是遠(yuǎn)程文件,則進(jìn)入步驟1041,使用遠(yuǎn)程方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象;如果是本地文件,則進(jìn)入步驟1042,使用本地方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象。 然后進(jìn)入步驟105,根據(jù)獲得的配置內(nèi)容,取出跟抽取動(dòng)作有關(guān)的信息,生成抽取規(guī)則,開始按抽取規(guī)則對(duì)FileObject對(duì)象下面的Excel文件進(jìn)行抽取。
再進(jìn)入步驟106,啟動(dòng)讀取線程,循環(huán)讀取基礎(chǔ)目錄FileObject對(duì)象下面符號(hào)抽取規(guī)則的Excel文件,并將文件的數(shù)據(jù)寫入內(nèi)存。 在步驟107,按照抽取規(guī)則,將內(nèi)存中的Excel內(nèi)容寫入Document對(duì)象中。
然后在步驟108,將生成的Document對(duì)象按照抽取規(guī)則中設(shè)置的包數(shù)目大小和包字節(jié)大小封裝成DataObject對(duì)象,并放入發(fā)送線程的發(fā)送隊(duì)列中。 在步驟109,啟動(dòng)發(fā)送線程,循環(huán)讀取發(fā)送隊(duì)列中的Data0bject對(duì)象,并發(fā)送到InforSib總線容器。 在步驟1010, sink端啟動(dòng)處理線程,監(jiān)聽sib總線;當(dāng)DO從sib總線到達(dá)sink端時(shí),處理線程將調(diào)用process方法來接接收DO并準(zhǔn)備處理。 在步驟1011,解析Sink端配置信息文件,獲取excel目的端文件路徑,解析xbean. xml中的內(nèi)容,獲取sink端所使用的excel文件路徑、excel sheet及其他信息。
在步驟1012,根據(jù)解析xbean. xml得到的excel文件路徑,判斷該路徑是否為本地路徑還是為遠(yuǎn)程路徑。 如果獲取的excel路徑為遠(yuǎn)程路徑,則在步驟1013,判斷該遠(yuǎn)程的excel文件是否
已經(jīng)存在或不存在,如果不存在則在步驟1014創(chuàng)建該文件,并進(jìn)入步驟1017。 如果獲取的excel路徑為本地路徑,則在步驟1015判斷該本地excel文件是否已
經(jīng)存在或不存在,如果不存在則在步驟1016創(chuàng)建該文件,并進(jìn)入步驟1017。 在步驟1017,載入已經(jīng)存在或則創(chuàng)建的excel文件到內(nèi)存當(dāng)中。 然后在步驟1018, sink端處理線程,接收到DO后,將從DO解析出excel結(jié)構(gòu),
excel數(shù)據(jù),excel數(shù)據(jù)格式等信息。 最后,進(jìn)入步驟1019, sink端處理線程,按照xbean中的獲得excel文件、excelsheet,將從DO中解析出的excel數(shù)據(jù),按照追加方式把excel數(shù)據(jù)保存到excel文件中。
權(quán)利要求
一種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于獲取并解析source和sink端的配置信息,并行啟動(dòng)多個(gè)線程分別用于讀取source端excel文件內(nèi)容、發(fā)送封裝后的DataObject對(duì)象和sink接收獲得的DataObject對(duì)象進(jìn)行處理,并最后寫入excel文件。
2. 根據(jù)權(quán)利要求1所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 獲取并解析source和sink端的配置信息的步驟為獲取source端的xbean. xml文件,并 解析出對(duì)應(yīng)的配置信息;獲取sink端的xbean. xml文件,并解析出對(duì)應(yīng)的配置信息。
3. 根據(jù)權(quán)利要求1所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 按照下列步驟進(jìn)行并行啟動(dòng)多個(gè)線程分別用于讀取source端excel文件內(nèi)容、發(fā)送封裝后 的DataObject對(duì)象和sink接收獲得的DataObject對(duì)象進(jìn)行處理,并最后寫入excel文件 的操作啟動(dòng)source端讀取線程,循環(huán)讀取基礎(chǔ)目錄FileObject對(duì)象下面符合抽取規(guī)則的 Excel文件,并將內(nèi)容封裝成若干個(gè)DataObject對(duì)象送入發(fā)送隊(duì)列中;啟動(dòng)發(fā)送線程,循環(huán)讀取發(fā)送隊(duì)列中的DataObject對(duì)象,并發(fā)送到InforSib總線容器;啟動(dòng)sink端處理線程,監(jiān)聽I(yíng)nforSib總線;當(dāng)DataObject從InforSib總線到達(dá)sink 端時(shí),處理線程將調(diào)用process方法來接接收DataObject并準(zhǔn)備處理。
4. 根據(jù)權(quán)利要求2所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 按照下列步驟來獲取source端配置文件解析source端xbe肌xml文件,獲取Source端配置信息;通過解析Xml文件,獲得配置信息中的r皿Mode項(xiàng)內(nèi)容來確定抽取模式是實(shí)時(shí)或定時(shí) 或觸發(fā);根據(jù)Xml中的remoteFile項(xiàng)配置信息,判斷是進(jìn)行遠(yuǎn)程還是本地的Excel文件數(shù)據(jù)抽 取,如果是遠(yuǎn)程文件,則使用遠(yuǎn)程方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象,如果是本地文件, 則使用本地方法創(chuàng)建基礎(chǔ)目錄的FileObject對(duì)象;根據(jù)獲得的配置內(nèi)容,取出跟抽取動(dòng)作有關(guān)的信息,生成抽取規(guī)則,開始按抽取規(guī)則對(duì) FileObject對(duì)象下面的Excel文件進(jìn)行抽取。
5. 根據(jù)權(quán)利要求3所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 Source按照如下步驟進(jìn)行讀取excel文件內(nèi)容操作啟動(dòng)讀取線程,循環(huán)讀取基礎(chǔ)目錄FileObject對(duì)象下面符號(hào)抽取規(guī)則的Excel文件, 并將文件的數(shù)據(jù)寫入內(nèi)存;按照抽取規(guī)則,將內(nèi)存中的Excel內(nèi)容寫入Document對(duì)象中;將生成的Document對(duì)象按照抽取規(guī)則中設(shè)置的包數(shù)目大小和包字節(jié)大小封裝成 DataObject對(duì)象,并放入發(fā)送線程的發(fā)送隊(duì)列中。
6. 根據(jù)權(quán)利要求2所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 按照如下步驟獲得sink端配置信息解析Sink端配置信息文件xbean. xml ,獲取excel目的端文件路徑,解析xbean. xml中 的內(nèi)容,獲取sink端所使用的excel文件路徑、excel sheet及其他信息;根據(jù)解析xbean. xml得到的excel文件路徑,判斷該路徑是否為本地路徑還是為遠(yuǎn)程路徑;如果獲取的excel路徑為遠(yuǎn)程路徑,則判斷該遠(yuǎn)程的excel文件是否已經(jīng)存在或不存 在,如果不存在則創(chuàng)建該文件;如果獲取的excel路徑為本地路徑,則判斷該本地excel文件是否已經(jīng)存在或不存在, 如果不存在則創(chuàng)建該文件;自動(dòng)載入已經(jīng)存在或則創(chuàng)建的excel文件到內(nèi)存當(dāng)中。
7.根據(jù)權(quán)利要求3所述的針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,其特征在于 Sink端按照如下步驟進(jìn)行接收和處理操作sink端啟動(dòng)處理線程,監(jiān)聽I(yíng)nforSib總線;當(dāng)DataObject從InforSib總線到達(dá)sink 端時(shí),處理線程將調(diào)用process方法來接接收DataObject并準(zhǔn)備處理;sink端處理線程,接收到DataObject后,將從DataObject解析出excel結(jié)構(gòu),excel 數(shù)據(jù),excel數(shù)據(jù)格式信息;sink端處理線程,按照xbean中的獲得excel文件、excel sheet,將從DataObject中 解析出的excel數(shù)據(jù),按照追加方式把excel數(shù)據(jù)保存到excel文件中。
全文摘要
一種針對(duì)Excel文件的增量數(shù)據(jù)的ETL實(shí)現(xiàn)方法,基于開源JavaApi上的InfoSib-ExcelSource和InfoSib-ExcelSink構(gòu)件,采用對(duì)文件增量和文件內(nèi)容全量進(jìn)行抽取,而且還支持對(duì)指定部分的文件內(nèi)容進(jìn)行抽?。恢С忠话愫吞厥飧袷轿募姆珠_抽??;支持文件過濾、Sheet表單過濾及數(shù)據(jù)列過濾;支持Excel到Excel、Excel到數(shù)據(jù)庫及數(shù)據(jù)庫到Excel;支持遠(yuǎn)程Excel數(shù)據(jù)抽??;支持一次配置多次運(yùn)行;支持實(shí)時(shí)、定時(shí)及觸發(fā)三種抽取模式。
文檔編號(hào)G06F9/44GK101697126SQ20091022962
公開日2010年4月21日 申請(qǐng)日期2009年10月28日 優(yōu)先權(quán)日2009年10月28日
發(fā)明者扶文海, 舒琦, 陳俊 申請(qǐng)人:山東中創(chuàng)軟件商用中間件股份有限公司;