本申請涉及報(bào)表系統(tǒng)中的ETL調(diào)度系統(tǒng)技術(shù)領(lǐng)域,特別涉及一種生成字符分隔值(Comma-Separated Values,CSV)文件的方法及裝置。
背景技術(shù):
報(bào)表系統(tǒng)是將計(jì)算機(jī)技術(shù)與會(huì)計(jì)報(bào)表編制方法相結(jié)合而設(shè)計(jì)出的、專門用于報(bào)表數(shù)據(jù)處理的軟件。目前,隨著報(bào)表系統(tǒng)中的業(yè)務(wù)人員需要的明細(xì)數(shù)據(jù)越來越多,導(dǎo)致明細(xì)數(shù)據(jù)的數(shù)量級較大,因此,在報(bào)表系統(tǒng)中支持?jǐn)?shù)據(jù)壓縮包的導(dǎo)出,該數(shù)據(jù)壓縮包供財(cái)務(wù)人員等自己下載并解壓進(jìn)行瀏覽。
一般情況下,導(dǎo)出的數(shù)據(jù)壓縮包解壓后得到的數(shù)據(jù)文件的可讀性都較差,例如,數(shù)據(jù)文件中的分隔符不統(tǒng)一或者數(shù)據(jù)內(nèi)容錯(cuò)位等,可能會(huì)導(dǎo)致財(cái)務(wù)人員對賬時(shí)可能無法確定一行數(shù)據(jù)的開始或結(jié)尾,或者無法讀懂?dāng)?shù)據(jù)等。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明人在研究過程中發(fā)現(xiàn),現(xiàn)有技術(shù)中的報(bào)表系統(tǒng)中可導(dǎo)出的數(shù)據(jù)壓縮包,雖然也可以作為數(shù)據(jù)文件供財(cái)務(wù)人員等用戶瀏覽,但是這些數(shù)據(jù)文件的數(shù)據(jù)可讀性較差(例如數(shù)據(jù)內(nèi)容錯(cuò)位等),而如果能為財(cái)務(wù)人員將可讀性較差的數(shù)據(jù)文件預(yù)先進(jìn)行可讀性處理,例如,僅獲取數(shù)據(jù)文件中的數(shù)據(jù)內(nèi)容,并且對數(shù)據(jù)內(nèi)容本身進(jìn)行數(shù)據(jù)類型的歸類等操作,從而可以得到數(shù)據(jù)內(nèi)容不再錯(cuò)位且不包括各種類型的分隔符的CSV文件供用戶瀏覽,CSV文件是一種用來存儲(chǔ)電子表格或數(shù)據(jù)的純文本文件,可讀性較強(qiáng),在將其直接提供給財(cái)務(wù)人員等用戶查看的基礎(chǔ)上,還不會(huì)影響報(bào)表系統(tǒng)中處理數(shù)據(jù)的效率。
基于此,本申請?zhí)峁┝艘环NCSV文件的生成方法,用于解決現(xiàn)有技術(shù)中從報(bào)表系統(tǒng)中導(dǎo)出的數(shù)據(jù)文件的可讀性較差,影響數(shù)據(jù)處理效率等的問題。
本申請還提供了一種CSV文件的生成裝置,用以保證上述方法在實(shí)際中的實(shí)現(xiàn)及應(yīng)用。
為了解決上述問題,本申請?zhí)峁┑囊环NCSV文件的生成,該方法包括:
獲取預(yù)先配置的、待生成的CSV文件的配置信息,所述配置信息包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽;所述字段標(biāo)簽用于表示所述CSV文件包括的數(shù)據(jù)類型;
實(shí)時(shí)判斷當(dāng)前時(shí)刻是否滿足所述觸發(fā)周期,如果是,則依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù);
按照所述各字段標(biāo)簽所表示的數(shù)據(jù)類型,將所述目標(biāo)源數(shù)據(jù)生成目標(biāo)CSV文件。
其中,所述依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù)之前,還包括:
判斷源數(shù)據(jù)庫中是否保存有所述源數(shù)據(jù)標(biāo)識對應(yīng)的各個(gè)源文件,如果是,則執(zhí)行所述依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù)。
其中,所述依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù),包括:
依據(jù)所述源數(shù)據(jù)標(biāo)識,從所述源數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件;
依據(jù)所述CSV文件包括的數(shù)據(jù)類型,分別從所述各個(gè)源文件中獲取所述數(shù)據(jù)類型對應(yīng)的目標(biāo)源數(shù)據(jù)。
其中,所述按照所述各字段標(biāo)簽所表示的數(shù)據(jù)類型,將所述目標(biāo)源數(shù)據(jù)生成目標(biāo)CSV文件,包括:
將多個(gè)所述目標(biāo)源數(shù)據(jù)合并為一個(gè)數(shù)據(jù)中間文件;
從所述數(shù)據(jù)中間文件中分別獲取所述各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容;
將所述各字段標(biāo)簽及其對應(yīng)的各條字段內(nèi)容組合為表格數(shù)據(jù),得到目標(biāo)CSV文件。
其中,所述將所述各字段標(biāo)簽及其對應(yīng)的各條字段內(nèi)容組合為表格數(shù)據(jù),得到目標(biāo)CSV文件,包括:
按照所述各字段標(biāo)簽在所述配置信息中的配置順序,分別確定第N個(gè)字段標(biāo)簽;其中,N為整數(shù),N的最小值為1,最大值為所述各字段標(biāo)簽的總個(gè)數(shù);
將所述第N個(gè)字段標(biāo)簽及對應(yīng)的第N條字段內(nèi)容存儲(chǔ)至預(yù)設(shè)表格的第N列位置,直至各字段標(biāo)簽都處理完畢;
將存儲(chǔ)后的預(yù)設(shè)表格保存為所述目標(biāo)CSV文件。
其中,所述配置信息還包括拆分標(biāo)簽,所述拆分標(biāo)簽為所述各字段標(biāo)簽中的任意一個(gè)字段標(biāo)簽,所述將存儲(chǔ)后的預(yù)設(shè)表格保存為所述目標(biāo)CSV文件,包括:
從所述預(yù)設(shè)表格中所述拆分標(biāo)簽所在的列位置中,獲取不同的字段內(nèi)容分別作為拆分后的CSV文件的名稱;
將存儲(chǔ)后的預(yù)設(shè)表格保存為固定個(gè)數(shù)的CSV文件;其中,所述固定個(gè)數(shù)與所述不同的字段內(nèi)容的個(gè)數(shù)相同,且所述固定個(gè)數(shù)的CSV文件的名稱分別為所述不同的字段內(nèi)容。
其中,所述配置信息還包括:待上傳的服務(wù)器地址和文件地址;所述方法還包括:
將生成的目標(biāo)CSV文件上傳至所述服務(wù)器地址對應(yīng)的目標(biāo)服務(wù)器中的文件地址處。
其中,所述配置信息還包括:日志存儲(chǔ)地址;所述方法還包括:
將生成所述目標(biāo)CSV文件的日志信息存儲(chǔ)至所述日志存儲(chǔ)地址。
本申請實(shí)施例提供了一種CSV文件的生成裝置,該裝置包括:
配置獲取單元,用于獲取預(yù)先配置的、待生成的CSV文件的配置信息,所述配置信息包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽;所述字段標(biāo)簽用于表示所述CSV文件包括的數(shù)據(jù)類型;
第一判斷單元,用于實(shí)時(shí)判斷當(dāng)前時(shí)刻是否滿足所述觸發(fā)周期;
源數(shù)據(jù)獲取單元,用于在所述判斷單元的結(jié)果為是的情況下,依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù);
生成單元,用于按照所述各字段標(biāo)簽所表示的數(shù)據(jù)類型,將所述目標(biāo)源數(shù)據(jù)生成目標(biāo)CSV文件。
其中,所述裝置還包括:
第二判斷單元,用于判斷源數(shù)據(jù)庫中是否保存有所述源數(shù)據(jù)標(biāo)識對應(yīng)的源文件;
觸發(fā)單元,用于在所述第二判斷單元的結(jié)果為是的情況下,觸發(fā)所述源數(shù)據(jù)獲取單元。
其中,所述源數(shù)據(jù)獲取單元包括:
定位子單元,用于依據(jù)所述源數(shù)據(jù)標(biāo)識,從所述源數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件;
源數(shù)據(jù)獲取子單元,用于依據(jù)所述CSV文件包括的數(shù)據(jù)類型,分別從所述各個(gè)源文件中獲取所述數(shù)據(jù)類型對應(yīng)的目標(biāo)源數(shù)據(jù)。
其中,所述生成單元包括:
合并子單元,用于將多個(gè)所述目標(biāo)源數(shù)據(jù)合并為一個(gè)數(shù)據(jù)中間文件;
字段內(nèi)容獲取子單元,用于從所述數(shù)據(jù)中間文件中分別獲取所述各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容;
組合子單元,用于將所述各字段標(biāo)簽及其對應(yīng)的各條字段內(nèi)容組合為表格數(shù)據(jù),得到目標(biāo)CSV文件。
其中,所述組合子單元包括:
標(biāo)簽確定子單元,用于按照所述各字段標(biāo)簽在所述配置信息中的配置順序,分別確定第N個(gè)字段標(biāo)簽;
存儲(chǔ)子單元,用于將所述第N個(gè)字段標(biāo)簽及對應(yīng)的第N條字段內(nèi)容存儲(chǔ)至預(yù)設(shè)表格的第N列位置,直至各字段標(biāo)簽都處理完畢;其中,N為整數(shù),N的最小值為1,最大值為所述各字段標(biāo)簽的總個(gè)數(shù);
保存子單元,用于將存儲(chǔ)后的預(yù)設(shè)表格保存為所述目標(biāo)CSV文件。
其中,所述配置信息還包括拆分標(biāo)簽,所述拆分標(biāo)簽為所述各字段標(biāo)簽中的任意一個(gè)字段標(biāo)簽,所述組合子單元包括:
名稱獲取子單元,用于從所述預(yù)設(shè)表格中所述拆分標(biāo)簽所在的列位置中,獲取不同的字段內(nèi)容分別作為拆分后的CSV文件的名稱;
保存子單元,用于將存儲(chǔ)后的預(yù)設(shè)表格保存為固定個(gè)數(shù)的CSV文件;其中,所述固定個(gè)數(shù)與所述不同的字段內(nèi)容的個(gè)數(shù)相同,且所述固定個(gè)數(shù)的CSV文件的名稱分別為所述不同的字段內(nèi)容。
其中,所述配置信息還包括:待上傳的服務(wù)器地址和文件地址;所述裝置還包括:
上傳單元,用于將生成的目標(biāo)CSV文件上傳至所述服務(wù)器地址對應(yīng)的目標(biāo)服務(wù)器中的文件地址處。
其中,所述配置信息還包括:日志存儲(chǔ)地址;所述裝置還包括:
日志存儲(chǔ)單元,用于將生成所述目標(biāo)CSV文件的日志信息存儲(chǔ)至所述日志存儲(chǔ)地址。
與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點(diǎn):
在本申請實(shí)施例中,預(yù)先為待生成的CSV文件配置好配置信息,在該配置信息中指明了生成CSV文件的源數(shù)據(jù),以及CSV文件的字段標(biāo)簽,因此,在觸發(fā)周期到來時(shí),就可以依據(jù)源數(shù)據(jù)來生成可讀性較好的CSV文件,在CSV文件中,因?yàn)橹挥袛?shù)據(jù)內(nèi)容本身,不再包括不統(tǒng)一的分隔符,并且,因?yàn)槊恳涣袛?shù)據(jù)都對應(yīng)于預(yù)先配置好的各個(gè)字段標(biāo)簽,所以也不再有數(shù)據(jù)錯(cuò)位等情況的發(fā)生。因此,生成的CSV文件就更容易被財(cái)務(wù)人員等用戶查看和瀏覽,不僅提升了報(bào)表系統(tǒng)中數(shù)據(jù)的可讀性,提升了用戶的體驗(yàn),同時(shí)還提高了報(bào)表系統(tǒng)中處理數(shù)據(jù)的效率。
進(jìn)一步的,本申請實(shí)施例還可以在數(shù)據(jù)量較大的情況下,生成多個(gè)CSV文件,使得每個(gè)CSV文件的數(shù)據(jù)量都不會(huì)太大,降低了在下載和查看CSV文件時(shí)對報(bào)表系統(tǒng)的性能的影響。
當(dāng)然,實(shí)施本申請的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本申請實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請的CSV文件的生成方法實(shí)施例1的流程圖;
圖2是本申請的CSV文件的生成方法實(shí)施例2的流程圖;
圖3是本申請的CSV文件的生成裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。
參考圖1,示出了本申請一種CSV文件的生成方法實(shí)施例的流程圖,本實(shí)施例可以應(yīng)用于報(bào)表系統(tǒng)的服務(wù)器上,本實(shí)施例可以包括以下步驟:
步驟101:獲取預(yù)先配置的、待生成的CSV文件的配置信息,所述配置信息包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽;所述字段標(biāo)簽用于表示所述CSV文件包括的數(shù)據(jù)類型。
在本實(shí)施例中,可以由本領(lǐng)域技術(shù)人員預(yù)先為待生成的CSV文件預(yù)先配置相應(yīng)的配置信息,該配置信息可以包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽等。該配置信息在實(shí)際應(yīng)用中可以保存在配置文件中,后續(xù)直接從配置文件中讀取各種配置信息即可,當(dāng)然,配置信息也可以以其他形式保存。
在配置信息中,觸發(fā)周期指的是觸發(fā)生成CSV文件的流程的時(shí)間周期,例如,日觸發(fā)、周觸發(fā)、月觸發(fā)等。如果是日觸發(fā),則可以每天都執(zhí)行一次本實(shí)施例的流程,即每天都生成一次CSV文件,以此類推,月觸發(fā)就是每月生成一次CSV文件。源數(shù)據(jù)標(biāo)識用于標(biāo)識待生成的CSV文件中的數(shù)據(jù)內(nèi)容的來源,例如,源數(shù)據(jù)標(biāo)識可以是Hive數(shù)據(jù)庫中源文件的名稱“pay_bills”,則表示該“pay_bills”文件中有生成CSV文件的數(shù)據(jù)內(nèi)容,在后續(xù)可以根據(jù)源數(shù)據(jù)標(biāo)識來定位到Hive數(shù)據(jù)庫中的源文件。Hive是一種基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,當(dāng)然,源文件也可以不是Hive數(shù)據(jù)庫中的數(shù)據(jù),也可以是其他類型的數(shù)據(jù)庫中的數(shù)據(jù)。
而配置信息中的各字段標(biāo)簽則是待生成的CSV文件中的數(shù)據(jù)類型,在實(shí)際應(yīng)用中,例如CSV文件可以是一種表格數(shù)據(jù),則各字段標(biāo)簽就可以是該表格數(shù)據(jù)中各列數(shù)據(jù)的列標(biāo)題。例如,配置信息中的字段標(biāo)簽分別為:“業(yè)務(wù)類型”、“支付名稱”、“網(wǎng)關(guān)支付金額”和“網(wǎng)關(guān)退款金額”,則最后生成的CSV文件中就有四列數(shù)據(jù),各列數(shù)據(jù)的列標(biāo)題就分別為:“業(yè)務(wù)類型”、“支付名稱”、“網(wǎng)關(guān)支付金額”和“網(wǎng)關(guān)退款金額”。此外,各字段標(biāo)簽還可以在配置信息中有一定的配置順序,例如,仍以上述“業(yè)務(wù)類型”、“支付名稱”、“網(wǎng)關(guān)支付金額”和“網(wǎng)關(guān)退款金額”的字段標(biāo)簽為例,第一個(gè)字段標(biāo)簽為“業(yè)務(wù)類型”,則待生成的CSV文件中的第一列數(shù)據(jù)內(nèi)容的列標(biāo)題就為“業(yè)務(wù)類型”,以此類推,第四列數(shù)據(jù)內(nèi)容的列標(biāo)題就為“網(wǎng)關(guān)退款金額”。但是,在實(shí)際應(yīng)用中,也可以不以各字段標(biāo)簽的配置順序?yàn)闇?zhǔn)來部署目標(biāo)CSV文件中的各列數(shù)據(jù),只需要各字段標(biāo)簽都在目標(biāo)CSV文件中作為列標(biāo)題存在即可。
步驟102:實(shí)時(shí)判斷當(dāng)前時(shí)刻是否滿足所述觸發(fā)周期,如果是,則進(jìn)入步驟103。
在獲取到配置信息后,接著實(shí)時(shí)判斷當(dāng)前時(shí)刻是否滿足所述觸發(fā)周期所表示的時(shí)刻。例如,假設(shè)觸發(fā)周期為日觸發(fā),而本領(lǐng)域技術(shù)人員預(yù)先設(shè)置好的基礎(chǔ)日期為:2017年2月22日13:00,則當(dāng)前時(shí)刻為“2017年2月23日13:00”時(shí),就滿足了所述日觸發(fā)的觸發(fā)周期,即,在2017年2月23日13:00的時(shí)刻,執(zhí)行步驟103??梢岳斫獾氖?,在當(dāng)前時(shí)刻不滿足觸發(fā)周期的情況下,可以重復(fù)執(zhí)行步驟102,或者隔一個(gè)預(yù)設(shè)時(shí)間段再執(zhí)行步驟102,例如,隔10分鐘執(zhí)行一次步驟102等。
步驟103:判斷源數(shù)據(jù)庫中是否保存有所述源數(shù)據(jù)標(biāo)識對應(yīng)的各個(gè)源文件,如果是,則進(jìn)入步驟104。
在到達(dá)觸發(fā)周期的時(shí)刻后,接著再判斷源數(shù)據(jù)庫中是否存儲(chǔ)有源數(shù)據(jù)標(biāo)識對應(yīng)的各個(gè)源文件。在本實(shí)施例中,可以采用Hive數(shù)據(jù)庫保存源數(shù)據(jù),因?yàn)榇傻腃SV文件中的數(shù)據(jù)都是由目標(biāo)源數(shù)據(jù)得來的,所以需要先判斷目標(biāo)源數(shù)據(jù)是否都保存在了Hive數(shù)據(jù)庫中,如果目標(biāo)源數(shù)據(jù)都保存在Hive數(shù)據(jù)庫中了再觸發(fā)步驟104。
在實(shí)際應(yīng)用中,Hive數(shù)據(jù)庫可以采用源文件的形式來保存源數(shù)據(jù),每一個(gè)源文件都可以采用源文件名稱來進(jìn)行標(biāo)識。例如,在Hive數(shù)據(jù)庫中有四個(gè)源文件,源文件名稱分別為:“pay_bills”、“ten_bills”、“gwara_bills”和“dim_pay”,而源數(shù)據(jù)標(biāo)識為:“pay_bills”和“gwara_bills”,則說明Hive數(shù)據(jù)庫中已經(jīng)保存有源數(shù)據(jù)標(biāo)識對應(yīng)的目標(biāo)源數(shù)據(jù),在這種情況下繼續(xù)觸發(fā)步驟104;而如果源數(shù)據(jù)標(biāo)識為:“diy_pay”,則判斷得到Hive數(shù)據(jù)庫中沒有保存有對應(yīng)的源文件的結(jié)果,在這種情況下,就不執(zhí)行后續(xù)步驟104。
當(dāng)然,為了減少對Hive數(shù)據(jù)庫的查詢次數(shù),Hive數(shù)據(jù)庫還可以專門用一個(gè)標(biāo)識表格來保存已經(jīng)保存過的源文件名稱,這樣的話,執(zhí)行本步驟時(shí)直接從該標(biāo)識表格中判斷源數(shù)據(jù)標(biāo)識是否存在即可。
步驟104:依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù)。
在本步驟中,再依據(jù)配置信息中的源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽,從源文件中獲取到需要生成CSV文件的目標(biāo)源數(shù)據(jù)。
具體的,步驟104具體可以包括步驟A1~步驟A2:
步驟A1:依據(jù)所述源數(shù)據(jù)標(biāo)識,從源數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件。
在實(shí)際應(yīng)用中,可以采用源文件名稱作為源數(shù)據(jù)標(biāo)識,以便通過源文件名稱來從Hive數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件。例如,源數(shù)據(jù)標(biāo)識分別為:“pay_bills”、“ten_bills”、“gwara_bills”和“dim_pay”,則表示目標(biāo)源數(shù)據(jù)需要從數(shù)據(jù)庫中的這四個(gè)源文件中獲取。
步驟A2:依據(jù)所述CSV文件包括的數(shù)據(jù)類型,分別從所述各個(gè)源文件中獲取所述數(shù)據(jù)類型對應(yīng)的目標(biāo)源數(shù)據(jù)。
在Hive數(shù)據(jù)庫中的各個(gè)源文件可能保存著大量的源數(shù)據(jù),并且每個(gè)原文件中可能只有一部分?jǐn)?shù)據(jù)是目標(biāo)源數(shù)據(jù),其他數(shù)據(jù)不需要獲取。因此,在本步驟中,就需要依據(jù)待生成的CSV文件中所包括的數(shù)據(jù)類型,來從各個(gè)源文件中獲取到該數(shù)據(jù)類型所對應(yīng)的目標(biāo)源數(shù)據(jù)。例如,字段標(biāo)簽分別有如下:“業(yè)務(wù)類型”、“支付名稱”、“網(wǎng)關(guān)支付金額”、“網(wǎng)關(guān)退款金額”、“收款賬戶”和“交易日期”,而源文件“pay_bills”中保存有“支付名稱”的源數(shù)據(jù),源文件“ten_bills”中保存有“業(yè)務(wù)類型”和“交易日期”的源數(shù)據(jù),源文件“gwara_bills”中保存有“網(wǎng)關(guān)支付金額”的源數(shù)據(jù),源文件“dim_pay”中保存有“收款賬戶”和“網(wǎng)關(guān)退款金額”的源數(shù)據(jù)。則具體的,需要分別從源文件“pay_bills”中獲取“支付名稱”的源數(shù)據(jù),從源文件“ten_bills”中獲取“業(yè)務(wù)類型”和“交易日期”的源數(shù)據(jù),從源文件“gwara_bills”中獲取“網(wǎng)關(guān)支付金額”的源數(shù)據(jù),以及,從源文件“dim_pay”中獲取“收款賬戶”和“網(wǎng)關(guān)退款金額”的源數(shù)據(jù)。
步驟105:按照所述各字段標(biāo)簽所表示的數(shù)據(jù)類型,將所述目標(biāo)源數(shù)據(jù)生成目標(biāo)CSV文件。
再按照配置信息中的各字段標(biāo)簽所表示的數(shù)據(jù)類型,將從源文件中獲取到的目標(biāo)源數(shù)據(jù)生成為目標(biāo)CSV文件。例如,字段標(biāo)簽“業(yè)務(wù)類型”表示對應(yīng)的CSV文件中某一列數(shù)據(jù)的數(shù)據(jù)類型為“業(yè)務(wù)類型”。
具體的,步驟105可以包括步驟B1~步驟B3:
步驟B1:將多個(gè)所述目標(biāo)源數(shù)據(jù)合并為一個(gè)數(shù)據(jù)中間文件。
在本步驟中,因?yàn)槟繕?biāo)源數(shù)據(jù)一般是從多個(gè)源文件中獲取到的,因此,在生成CSV文件之前,可以先將獲取到的目標(biāo)源數(shù)據(jù)直接合并為一個(gè)數(shù)據(jù)中間文件。該數(shù)據(jù)中間文件中已經(jīng)包括了CSV文件中的所有源數(shù)據(jù),但是該數(shù)據(jù)中間文件因?yàn)槭菍⒏鱾€(gè)源文件中的目標(biāo)源數(shù)據(jù)直接合并得到的,所以可能會(huì)存在一些分隔符,例如空格,或者“/t”等,仍然是用戶難以讀懂的,所以后續(xù)需要將該數(shù)據(jù)中間文件再生成為表格數(shù)據(jù)的CSV文件。
步驟B2:從所述數(shù)據(jù)中間文件中分別獲取所述各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容。
在數(shù)據(jù)中間文件中保存了從各個(gè)源文件獲取到的目標(biāo)源數(shù)據(jù),因此,數(shù)據(jù)中間文件中就保存了CSV文件中的各個(gè)字段標(biāo)簽所對應(yīng)的字段內(nèi)容,所以可以按照各字段標(biāo)簽在配置信息中的配置順序,來從數(shù)據(jù)中間文件中獲取對應(yīng)的各條字段內(nèi)容。例如,按照配置順序第一個(gè)字段標(biāo)簽為“業(yè)務(wù)類型”,而數(shù)據(jù)中間文件中第一列數(shù)據(jù)為:“選座票、選座票、選座票、選影片”,則針對字段標(biāo)簽“業(yè)務(wù)類型”,獲取到的第一條字段內(nèi)容就是:“選座票、選座票、選座票、選影片”,該第一條字段內(nèi)容將作為CSV文件的第一列數(shù)據(jù)內(nèi)容,以此類推,可以得到CSV文件中的全部列數(shù)據(jù)內(nèi)容。
步驟B3:將所述各字段標(biāo)簽及其對應(yīng)的各條字段內(nèi)容組合為表格數(shù)據(jù),得到目標(biāo)CSV文件。
待CSV文件中的各個(gè)字段標(biāo)簽對應(yīng)的各條字段內(nèi)容都從數(shù)據(jù)中間文件中獲取到以后,則將全部字段標(biāo)簽即對應(yīng)的全部字段內(nèi)容分別作為表格數(shù)據(jù),存儲(chǔ)至預(yù)設(shè)的EXCEL表格中,從而得到目標(biāo)CSV文件,該CSV文件可以用EXCEL程序打開。
參考表1所示,為一種示例性的CSV文件打開后的界面示意表。
表1
在表1中,各列的列標(biāo)題按照配置順序分別為:“交易類型”、“支付時(shí)間”、“商戶訂單號”、“支付方式”、“業(yè)務(wù)類型”、“收款金額”和“退款金額”,即分別對應(yīng)了配置信息中的字段標(biāo)簽,而第一個(gè)字段標(biāo)簽“交易類型”對應(yīng)的字段內(nèi)容為:“'錢包余額'、'錢包余額'、'錢包余額'、'錢包余額'、'卡快捷支付'和'卡快捷支付'”,因?yàn)樽侄蝺?nèi)容一共有6個(gè),所以每一個(gè)字段內(nèi)容分布一行,即,字段標(biāo)簽“交易類型”的字段內(nèi)容共有6行,以此類推,字段標(biāo)簽“支付時(shí)間”的字段內(nèi)容也是6個(gè),分布了6行,最后一個(gè)字段標(biāo)簽“退款金額”的字段內(nèi)容也是6個(gè),分別分布了6行。
在實(shí)際應(yīng)用中,CSV文件生成以后,為了供財(cái)務(wù)人員等用戶下載查看,可以在配置信息中配置FTP服務(wù)器地址和文件地址,其中,F(xiàn)TP服務(wù)器地址對應(yīng)于待上傳的服務(wù)器,文件地址為該待上傳的服務(wù)器中CSV文件的保存地址,因此,在步驟105之后,還可以包括:
步驟106:將生成的目標(biāo)CSV文件上傳至所述服務(wù)器地址對應(yīng)的目標(biāo)服務(wù)器中的文件地址處。
根據(jù)配置信息中的FTP服務(wù)器地址和文件地址,將目標(biāo)CSV文件上傳至該FTP服務(wù)器中的文件地址處。例如,F(xiàn)TP服務(wù)器地址可以為:“FTP_ip=10.10.10.10”,該FTP服務(wù)器地址表示上傳至IP地址為“10.10.10.10”的FTP服務(wù)器,而文件地址可以為:“ftp_dir=ftpdata/Finance/”,該文件地址表示目標(biāo)CSV文件保存至該FTP服務(wù)器中的“ftpdata/Finance/”路徑處。進(jìn)一步的,配置信息中還可以預(yù)先配置好目標(biāo)CSV文件的名稱,例如,“program=ftp_payment_gateway”,則表示“payment_gateway”為目標(biāo)CSV文件的名稱。
當(dāng)然,以上示例僅僅是具體應(yīng)用中的可能的數(shù)據(jù),不應(yīng)將其理解為本申請的限定。
在實(shí)際應(yīng)用中,配置信息中還可以包括:日志存儲(chǔ)地址;該日志存儲(chǔ)地址可以表示將CSV文件的生成日志的存放地址,以便本領(lǐng)域技術(shù)人員從該存放地址處查看CSV文件的日志。則本實(shí)施例還可以將生成的所述目標(biāo)CSV文件的日志信息存儲(chǔ)至所述日志存儲(chǔ)地址,其中,該日志信息可以包括生成CSV文件的過程中產(chǎn)生的中間數(shù)據(jù)或結(jié)果數(shù)據(jù),以及,CSV文件的源數(shù)據(jù)信息,上傳的地址信息等。
可見,在本申請實(shí)施例中,預(yù)先為待生成的CSV文件配置好配置信息,在該配置信息中指明了生成CSV文件的源數(shù)據(jù),以及CSV文件的字段標(biāo)簽,因此,在觸發(fā)周期到來時(shí),就可以依據(jù)源數(shù)據(jù)生成可讀性較好的CSV文件,在CSV文件中,因?yàn)橹挥袛?shù)據(jù)內(nèi)容本身,不再包括不統(tǒng)一的分隔符,并且,因?yàn)槊恳涣袛?shù)據(jù)都對應(yīng)于預(yù)先配置好的各個(gè)字段標(biāo)簽,所以也不再有數(shù)據(jù)錯(cuò)位等情況的發(fā)生。因此,生成的CSV文件就更容易被財(cái)務(wù)人員等用戶查看和瀏覽,不僅提升了報(bào)表系統(tǒng)中數(shù)據(jù)的可讀性,提升了用戶的體驗(yàn),同時(shí)還提高了報(bào)表系統(tǒng)中處理數(shù)據(jù)的效率。
參考圖2,示出了本申請一種CSV文件的生成方法實(shí)施例的流程圖,本實(shí)施例可以應(yīng)用于報(bào)表系統(tǒng)的服務(wù)器上,本實(shí)施例可以包括以下步驟:
步驟201:獲取預(yù)先配置的、待生成的CSV文件的配置信息,所述配置信息可以包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識、各字段標(biāo)簽、待上傳的服務(wù)器地址、拆分標(biāo)簽。
其中,拆分標(biāo)簽可以用于表示將目標(biāo)CSV文件拆分為多個(gè)CSV文件,拆分標(biāo)簽可以是配置信息中各字段標(biāo)簽中的任意一個(gè)字段標(biāo)簽,具體設(shè)置為哪個(gè)字段標(biāo)簽可以由本領(lǐng)域技術(shù)人員自主確定。如果各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容的數(shù)據(jù)級較大,例如字段內(nèi)容有10萬行等,那么就會(huì)生成一個(gè)具有10萬行數(shù)據(jù)內(nèi)容的CSV文件,這就可能會(huì)導(dǎo)致文件內(nèi)容過多而下載和打開都較為緩慢。因此,可以采用拆分標(biāo)簽來生成多個(gè)CSV文件。
步驟202:當(dāng)前時(shí)刻滿足觸發(fā)周期且源數(shù)據(jù)庫中都保存有源數(shù)據(jù)標(biāo)識對應(yīng)的目標(biāo)源數(shù)據(jù)時(shí),依據(jù)所述源數(shù)據(jù)標(biāo)識,從源數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件。
步驟203:依據(jù)所述CSV文件包括的數(shù)據(jù)類型,分別從所述各個(gè)源文件中獲取所述各數(shù)據(jù)類型對應(yīng)的目標(biāo)源數(shù)據(jù)。
步驟204:將多個(gè)所述目標(biāo)源數(shù)據(jù)合并為一個(gè)數(shù)據(jù)中間文件,并從所述數(shù)據(jù)中間文件中分別獲取所述各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容。
步驟202~步驟204的內(nèi)容可以參考實(shí)施例1的相關(guān)介紹,在此不再贅述。
步驟205:按照所述各字段標(biāo)簽在所述配置信息中的配置順序,分別確定第N個(gè)字段標(biāo)簽。
在本實(shí)施例中,在生成CSV文件的具體過程中,可以按照配置信息中各字段標(biāo)簽的配置順序,來分別確定CSV文件中的第一列至第N列數(shù)據(jù)內(nèi)容。其中,N為整數(shù),N的最小值為1,最大值為所述各字段標(biāo)簽的總個(gè)數(shù)。例如,配置信息中的各字段標(biāo)簽分別為:“訂單號、業(yè)務(wù)類型、支付名稱和支付方式名稱”,則第一個(gè)字段標(biāo)簽為“訂單號”,第二個(gè)字段標(biāo)簽為“業(yè)務(wù)類型”,第三個(gè)字段標(biāo)簽為“支付名稱”,第四個(gè)字段標(biāo)簽為“支付方式名稱”。
步驟206:將所述第N個(gè)字段標(biāo)簽及對應(yīng)的第N條字段內(nèi)容存儲(chǔ)至預(yù)設(shè)表格的第N列位置,直至各字段標(biāo)簽都處理完畢。
在本步驟中,假設(shè)仍以N為4為例,依次將確定的第一個(gè)到第4個(gè)字段標(biāo)簽作為預(yù)設(shè)表格的4個(gè)列標(biāo)題,再分別將對應(yīng)的4條字段內(nèi)容作為4個(gè)列標(biāo)題對應(yīng)的列數(shù)據(jù),都存儲(chǔ)至預(yù)設(shè)表格中,得到一個(gè)具有四列數(shù)據(jù)的表格文件。
步驟207:將從所述預(yù)設(shè)表格中所述拆分標(biāo)簽所在的列位置中,獲取不同的字段內(nèi)容分別作為拆分后的CSV文件的名稱。
在本實(shí)施例中,因?yàn)檫€設(shè)置有拆分標(biāo)簽,可以判斷作為拆分標(biāo)簽的字段標(biāo)簽在哪一列。例如,對于表1所示的示例性CSV文件來說,假設(shè)拆分標(biāo)簽為“交易類型”,則“交易類型”所在的位置為表1的第一列位置,則獲取第一列的列數(shù)據(jù)為該拆分標(biāo)簽對應(yīng)的“不同的字段內(nèi)容”。以表1為例,獲取到的不同的字段內(nèi)容分別為:“錢包余額和卡快捷支付”。在這里需要說明的是,雖然第一列的字段內(nèi)容有六行,即對應(yīng)了四個(gè)“錢包余額”和兩個(gè)“卡快捷支付”,但是因?yàn)樵诒静襟E中確定的是不同的字段內(nèi)容,因此,可以得到“錢包余額”和“卡快捷支付”,并將這兩個(gè)不同的字段內(nèi)容,分別作為拆分后的CSV文件的名稱。
步驟208:將存儲(chǔ)后的預(yù)設(shè)表格保存為固定個(gè)數(shù)的CSV文件。
然后,再將存儲(chǔ)了全部字段標(biāo)簽及對應(yīng)的全部字段內(nèi)容的表1拆分為兩個(gè)CSV文件,其中,拆分后的CSV的個(gè)數(shù)與不同的字段內(nèi)容的個(gè)數(shù)相同,即因?yàn)楸?的第一列中有兩個(gè)不同的字段內(nèi)容“錢包余額”和“卡快捷支付”,所以拆分后的CSV文件也有兩個(gè),并且兩個(gè)CSV文件的名稱分別為所述不同的字段內(nèi)容,即第一個(gè)CSV文件的名稱為“錢包余額”,第二個(gè)CSV文件的名稱為“卡快捷支付”。
當(dāng)然,以上僅僅是一種具體的例子數(shù)據(jù),也可以以其他字段標(biāo)簽作為拆分標(biāo)簽,例如字段標(biāo)簽“訂單號”,或者,“支付名稱”等,可以理解的是,當(dāng)某一個(gè)字段標(biāo)簽對應(yīng)的字段內(nèi)容只有一個(gè)時(shí),例如表1中的字段標(biāo)簽“業(yè)務(wù)類型”只有“選座票”這一個(gè)字段內(nèi)容,則可以生成一個(gè)CSV文件而不進(jìn)行拆分,是否需要拆分以及拆分標(biāo)簽是哪一個(gè)字段標(biāo)簽由本領(lǐng)域技術(shù)人員預(yù)先在配置信息中配置好即可。
步驟209:將生成所述目標(biāo)CSV文件的日志信息存儲(chǔ)至所述日志存儲(chǔ)地址。
在本實(shí)施例中,再將生成兩個(gè)CSV文件的日志信息存儲(chǔ)至配置信息中的日志存儲(chǔ)地址處。
在本實(shí)施例中,不僅生成了更容易被用戶查看和瀏覽的、易讀性較強(qiáng)的CSV文件,提升了報(bào)表系統(tǒng)中數(shù)據(jù)的可讀性,提升了用戶的體驗(yàn),同時(shí)還提高了報(bào)表系統(tǒng)中處理數(shù)據(jù)的效率。進(jìn)一步的,還可以在數(shù)據(jù)量較大的情況下,生成多個(gè)CSV文件,使得每個(gè)CSV文件的數(shù)據(jù)量都不會(huì)太大,降低了在下載和查看CSV文件時(shí)對報(bào)表系統(tǒng)的性能的影響。
對于前述的方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請所必須的。
與上述本申請一種CSV文件的生成方法實(shí)施例所提供的方法相對應(yīng),參見圖3,本申請還提供了一種CSV文件的生成裝置實(shí)施例,在本實(shí)施例中,該裝置可以集成于報(bào)表系統(tǒng)的服務(wù)器上,該裝置可以包括:
配置獲取單元301,用于獲取預(yù)先配置的、待生成的CSV文件的配置信息,所述配置信息包括:觸發(fā)周期、源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽;所述字段標(biāo)簽用于表示所述CSV文件包括的數(shù)據(jù)類型。
第一判斷單元302,用于實(shí)時(shí)判斷當(dāng)前時(shí)刻是否滿足所述觸發(fā)周期。
源數(shù)據(jù)獲取單元303,用于在所述第一判斷單元的結(jié)果為是的情況下,依據(jù)所述源數(shù)據(jù)標(biāo)識和各字段標(biāo)簽獲取目標(biāo)源數(shù)據(jù)。
生成單元304,用于按照所述各字段標(biāo)簽所表示的數(shù)據(jù)類型,將所述目標(biāo)源數(shù)據(jù)生成目標(biāo)CSV文件。
其中,所述裝置還可以包括:
第二判斷單元,用于判斷源數(shù)據(jù)庫中是否保存有所述源數(shù)據(jù)標(biāo)識對應(yīng)的源文件;以及,觸發(fā)單元,用于在所述第二判斷單元的結(jié)果為是的情況下,觸發(fā)所述源數(shù)據(jù)獲取單元303。
其中,所述源數(shù)據(jù)獲取單元303具體可以包括:
定位子單元,用于依據(jù)所述源數(shù)據(jù)標(biāo)識,從源數(shù)據(jù)庫中定位目標(biāo)源數(shù)據(jù)所在的各個(gè)源文件;和,源數(shù)據(jù)獲取子單元,用于依據(jù)所述CSV文件包括的數(shù)據(jù)類型,分別從所述各個(gè)源文件中獲取所述數(shù)據(jù)類型對應(yīng)的目標(biāo)源數(shù)據(jù)。
其中,所述生成單元304具體可以包括:
合并子單元,用于將多個(gè)所述目標(biāo)源數(shù)據(jù)合并為一個(gè)數(shù)據(jù)中間文件;字段內(nèi)容獲取子單元,用于從所述數(shù)據(jù)中間文件中分別獲取所述各字段標(biāo)簽對應(yīng)的各條字段內(nèi)容;和,組合子單元,用于將所述各字段標(biāo)簽及其對應(yīng)的各條字段內(nèi)容組合為表格數(shù)據(jù),得到目標(biāo)CSV文件。
其中,所述組合子單元具體可以包括:
標(biāo)簽確定子單元,用于按照所述各字段標(biāo)簽在所述配置信息中的配置順序,分別確定第N個(gè)字段標(biāo)簽;存儲(chǔ)子單元,用于將所述第N個(gè)字段標(biāo)簽及對應(yīng)的第N條字段內(nèi)容存儲(chǔ)至預(yù)設(shè)表格的第N列位置,直至各字段標(biāo)簽都處理完畢;其中,N為整數(shù),N的最小值為1,最大值為所述各字段標(biāo)簽的總個(gè)數(shù);和,保存子單元,用于將存儲(chǔ)后的預(yù)設(shè)表格保存為所述目標(biāo)CSV文件。
其中,所述配置信息還可以包括拆分標(biāo)簽,所述拆分標(biāo)簽為所述各字段標(biāo)簽中的任意一個(gè)字段標(biāo)簽,所述組合子單元可以包括:
名稱獲取子單元,用于從所述預(yù)設(shè)表格中所述拆分標(biāo)簽所在的列位置中,獲取不同的字段內(nèi)容分別作為拆分后的CSV文件的名稱;和,保存子單元,用于將存儲(chǔ)后的預(yù)設(shè)表格保存為固定個(gè)數(shù)的CSV文件;其中,所述固定個(gè)數(shù)與所述不同的字段內(nèi)容的個(gè)數(shù)相同,且所述固定個(gè)數(shù)的CSV文件的名稱分別為所述不同的字段內(nèi)容。
其中,所述配置信息還可以包括:待上傳的服務(wù)器地址和文件地址;所述裝置還可以包括:
上傳單元,用于將生成的目標(biāo)CSV文件上傳至所述服務(wù)器地址對應(yīng)的目標(biāo)服務(wù)器中的文件地址處。
其中,所述配置信息還可以包括:日志存儲(chǔ)地址;所述裝置還可以包括:
日志存儲(chǔ)單元,用于將生成所述目標(biāo)CSV文件的日志信息存儲(chǔ)至所述日志存儲(chǔ)地址。
可見,本申請實(shí)施例的裝置可以預(yù)先為待生成的CSV文件配置好配置信息,在該配置信息中指明了生成CSV文件的源數(shù)據(jù),以及CSV文件的字段標(biāo)簽,因此,在觸發(fā)周期到來時(shí),就可以依據(jù)源數(shù)據(jù)來生成可讀性較好的CSV文件,在CSV文件中,因?yàn)橹挥袛?shù)據(jù)內(nèi)容本身,不再包括不統(tǒng)一的分隔符,并且,因?yàn)槊恳涣袛?shù)據(jù)都對應(yīng)于預(yù)先配置好的各個(gè)字段標(biāo)簽,所以也不再有數(shù)據(jù)錯(cuò)位等情況的發(fā)生。因此,生成的CSV文件就更容易被財(cái)務(wù)人員等用戶查看和瀏覽,不僅提升了報(bào)表系統(tǒng)中數(shù)據(jù)的可讀性,提升了用戶的體驗(yàn),同時(shí)還提高了報(bào)表系統(tǒng)中處理數(shù)據(jù)的效率。
進(jìn)一步的,本申請實(shí)施例的裝置還可以在數(shù)據(jù)量較大的情況下,生成多個(gè)CSV文件,使得每個(gè)CSV文件的數(shù)據(jù)量都不會(huì)太大,降低了在下載和查看CSV文件時(shí)對報(bào)表系統(tǒng)的性能的影響。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
最后,還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上對本申請所提供的CSV文件的生成方法及裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。