王天舉 許丹亞 尹文志 齊晨虹
摘要:為解決實(shí)際業(yè)務(wù)中的數(shù)據(jù)接入解析處理等問(wèn)題,使數(shù)據(jù)的接入、轉(zhuǎn)換、解析、同步等工作更加高效便捷,文章通過(guò)對(duì)業(yè)務(wù)需求的分析和數(shù)據(jù)接入整合技術(shù)的調(diào)研,開(kāi)展對(duì)開(kāi)源ETL工具Kettle的研究。基于對(duì)Kettle應(yīng)用場(chǎng)景和業(yè)務(wù)數(shù)據(jù)特點(diǎn)的分析,構(gòu)建了基于Kettle的業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)換同步流程。經(jīng)實(shí)際項(xiàng)目案例驗(yàn)證,該流程與傳統(tǒng)方法相比,基于Kettle的數(shù)據(jù)轉(zhuǎn)換接入流程降低了開(kāi)發(fā)的復(fù)雜度提升了工作效率,不僅解決了在實(shí)際業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)接入轉(zhuǎn)化問(wèn)題,同時(shí)也為其他數(shù)據(jù)集成工作提供了更多思路。
關(guān)鍵詞:接入;轉(zhuǎn)換;解析;集成;流程
中圖分類號(hào):TP39? 文獻(xiàn)標(biāo)志碼:A
0 引言
隨著數(shù)字時(shí)代的到來(lái),數(shù)據(jù)科學(xué)技術(shù)不斷發(fā)展,社會(huì)各行各業(yè)都越來(lái)越重視數(shù)據(jù),數(shù)據(jù)使得行業(yè)間的聯(lián)系更加密切,企業(yè)對(duì)數(shù)據(jù)需求即時(shí)性的要求也相應(yīng)提高,基礎(chǔ)數(shù)據(jù)點(diǎn)對(duì)點(diǎn)傳輸、數(shù)據(jù)更新同步變得尤為重要。數(shù)據(jù)傳輸和同步的方法多種多樣[1],目前,數(shù)據(jù)轉(zhuǎn)換、同步的任務(wù)一般有兩種方式可以選擇[2-5]。一種是比較傳統(tǒng)的方式,即通過(guò)SQL編程或者Java編碼來(lái)實(shí)現(xiàn),但是編碼難度較大,難以快速構(gòu)建ETL工作環(huán)境,具有一定的局限性。另外一種方式是通過(guò)數(shù)據(jù)庫(kù)軟件自帶的抽取工具來(lái)實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換和同步,但是這種方式靈活性不高,要求數(shù)據(jù)庫(kù)必須是指定的類型[6]。
針對(duì)上述問(wèn)題,結(jié)合在實(shí)際構(gòu)建數(shù)據(jù)接入流程所積累的經(jīng)驗(yàn),以及數(shù)據(jù)源多樣、數(shù)據(jù)結(jié)構(gòu)多樣、數(shù)據(jù)量大等特點(diǎn),本文基于開(kāi)源工具Kettle構(gòu)建數(shù)據(jù)接入轉(zhuǎn)換流程。在實(shí)際應(yīng)用中發(fā)現(xiàn),該方法能夠很好地解決傳統(tǒng)方式數(shù)據(jù)接入局限性的問(wèn)題,能夠很好地提高開(kāi)發(fā)速度和工作效率,通過(guò)接入流程的設(shè)計(jì),提供一種新的數(shù)據(jù)處理流程的思路與方法。
1 Kettle簡(jiǎn)介
Kettle 是一個(gè)數(shù)據(jù)抽取、轉(zhuǎn)換、裝載(Extract-Transform-Load, ETL)工具[7-10],主要用來(lái)對(duì)不同數(shù)據(jù)庫(kù)的數(shù)據(jù)、不同來(lái)源的數(shù)據(jù)進(jìn)行處理,提供圖形化的用戶界面,使用戶使用時(shí)描述想做什么,而不是想要怎么做。Kettle 有兩種腳本文件:Transformation和Job。Transformation是轉(zhuǎn)換,Job是對(duì)多個(gè)轉(zhuǎn)換構(gòu)建的整個(gè)工作流的抽象和控制[11-14]。Kettle概念模型如圖1所示。
2 業(yè)務(wù)需求介紹
某鐵路業(yè)務(wù)系統(tǒng)需要的業(yè)務(wù)數(shù)據(jù)會(huì)由業(yè)務(wù)部門定時(shí)放到單位內(nèi)網(wǎng)FTP服務(wù)器上,開(kāi)發(fā)人員定時(shí)從FTP服務(wù)器上獲取數(shù)據(jù)到本地,并對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行備份。數(shù)據(jù)以非標(biāo)準(zhǔn)的XML文件存儲(chǔ),傳統(tǒng)開(kāi)發(fā)人員在獲取數(shù)據(jù)之后需要編寫(xiě)大量代碼對(duì)XML文件進(jìn)行解碼、標(biāo)準(zhǔn)化、解析、入庫(kù)等操作,實(shí)現(xiàn)過(guò)程復(fù)雜、耗時(shí),且后期維護(hù)困難、維護(hù)成本較高。
上述問(wèn)題在系統(tǒng)開(kāi)發(fā)過(guò)程中普遍存在。對(duì)于不同數(shù)據(jù)類型的業(yè)務(wù)數(shù)據(jù),開(kāi)發(fā)人員需要開(kāi)發(fā)指定的代碼,處理復(fù)雜數(shù)據(jù)類型的需求。這對(duì)開(kāi)發(fā)人員的要求比較高。如果有一種可以供不同類型的數(shù)據(jù)源接入數(shù)據(jù),并且操作簡(jiǎn)單、流程存在一定復(fù)用性的方案,那么就可以極大降低開(kāi)發(fā)人員的工作難度和工作量。
3 數(shù)據(jù)接入流程
結(jié)合業(yè)務(wù)需求分析,本次數(shù)據(jù)接入主要實(shí)現(xiàn)定時(shí)數(shù)據(jù)獲取、數(shù)據(jù)轉(zhuǎn)碼、數(shù)據(jù)標(biāo)準(zhǔn)化、數(shù)據(jù)解析、數(shù)據(jù)篩選、數(shù)據(jù)去重、數(shù)據(jù)入庫(kù)等功能。
本文設(shè)計(jì)了數(shù)據(jù)定時(shí)接入的全部流程,在啟動(dòng)定時(shí)任務(wù)后,首先從FTP服務(wù)器上獲取數(shù)據(jù)文件,完成數(shù)據(jù)文件的轉(zhuǎn)碼工作。轉(zhuǎn)碼完成之后,會(huì)對(duì)XML文件標(biāo)準(zhǔn)化,為后續(xù)文件做解析準(zhǔn)備。解析完之后,對(duì)于不符合要求的字段需要進(jìn)行數(shù)據(jù)篩選,完成數(shù)據(jù)篩選到數(shù)據(jù)入庫(kù)之前,需要對(duì)解析完的數(shù)據(jù)同數(shù)據(jù)庫(kù)中已經(jīng)存在的歷史數(shù)據(jù)進(jìn)行對(duì)比,判斷庫(kù)中是否已經(jīng)存在,從而完成數(shù)據(jù)篩選操作。數(shù)據(jù)接入流程如圖2所示。
3.1 數(shù)據(jù)獲取
業(yè)務(wù)部門會(huì)定時(shí)向開(kāi)發(fā)部門內(nèi)網(wǎng)FTP服務(wù)器上傳XML文件。開(kāi)發(fā)人員在獲取數(shù)據(jù)之后,在本地完成業(yè)務(wù)數(shù)據(jù)備份,然后清空開(kāi)發(fā)FTP文件夾,為下次數(shù)據(jù)同步做準(zhǔn)備。
3.2 數(shù)據(jù)轉(zhuǎn)碼
獲取數(shù)據(jù)后,開(kāi)發(fā)人員需要對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)碼處理,建立滿足標(biāo)準(zhǔn)化的文件編碼格式,解決數(shù)據(jù)編碼不一致、標(biāo)準(zhǔn)化過(guò)程中亂碼導(dǎo)致失敗的問(wèn)題。
3.3 數(shù)據(jù)標(biāo)準(zhǔn)化
轉(zhuǎn)碼后的數(shù)據(jù),需要得到標(biāo)準(zhǔn)化處理,包括內(nèi)容的標(biāo)準(zhǔn)化和文件名的標(biāo)準(zhǔn)化。這樣才能建立滿足解析數(shù)據(jù)要求的文件標(biāo)準(zhǔn),解決數(shù)據(jù)規(guī)范不一致、格式不統(tǒng)一的問(wèn)題。
3.4 數(shù)據(jù)解析
根據(jù)業(yè)務(wù)系統(tǒng)需求數(shù)據(jù)類型及數(shù)據(jù)格式,在對(duì)原始數(shù)據(jù)轉(zhuǎn)碼、標(biāo)準(zhǔn)化之后,開(kāi)發(fā)人員還需要使用Kettle設(shè)計(jì)來(lái)解析流程。解析流程需要注意組件之間數(shù)據(jù)輸入、組件功能、各個(gè)組件之間的關(guān)系等,這也是整個(gè)流程的關(guān)鍵。
3.5 數(shù)據(jù)篩選
開(kāi)發(fā)人員根據(jù)實(shí)際業(yè)務(wù)需求,從解析之后的數(shù)據(jù)中篩選出滿足業(yè)務(wù)系統(tǒng)需求的數(shù)據(jù)信息,剔除目標(biāo)數(shù)據(jù)庫(kù)中不需要的字段和記錄,同時(shí)為篩選之后的數(shù)據(jù)添加上UUID,將其作為唯一標(biāo)識(shí)。這樣操作可以解決去除多余數(shù)據(jù)、將達(dá)標(biāo)數(shù)據(jù)錄入目標(biāo)數(shù)據(jù)庫(kù)中的問(wèn)題,整個(gè)數(shù)據(jù)篩選工作需要利用Kettle工具篩選組件來(lái)完成。
3.6 數(shù)據(jù)入庫(kù)
篩選之后的數(shù)據(jù),經(jīng)過(guò)以上數(shù)據(jù)處理邏輯進(jìn)行處理,可以剔除不符合條件的數(shù)據(jù),完成數(shù)據(jù)的處理及質(zhì)量檢測(cè)。
根據(jù)以上數(shù)據(jù)策略步驟,結(jié)合實(shí)際需求分析,本文設(shè)計(jì)了如圖3所示的數(shù)據(jù)處理架構(gòu),構(gòu)建了基于Kettle的業(yè)務(wù)數(shù)據(jù)同步解析流程環(huán)境,形成了由業(yè)務(wù)數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫(kù)的持續(xù)更新機(jī)制。
4 業(yè)務(wù)應(yīng)用
基于Kettle的數(shù)據(jù)接入方法,結(jié)合業(yè)務(wù)數(shù)據(jù)信息及數(shù)據(jù)同步環(huán)境,本文設(shè)計(jì)了XML文件類型的數(shù)據(jù)接入轉(zhuǎn)換流程,通過(guò)流程中的數(shù)據(jù)獲取組件、轉(zhuǎn)換組件、標(biāo)準(zhǔn)化腳本程序、篩選組件等,對(duì)從FTP服務(wù)器上獲取的數(shù)據(jù)解析入庫(kù),并對(duì)數(shù)據(jù)準(zhǔn)確性和完整性進(jìn)行校驗(yàn)。同時(shí),為了滿足定時(shí)增量接入數(shù)據(jù)的需求,本文設(shè)計(jì)開(kāi)發(fā)了定時(shí)觸發(fā)執(zhí)行腳本,以實(shí)現(xiàn)數(shù)據(jù)的增量接入,完成數(shù)據(jù)的持續(xù)更新。
5 基于Kettle的作業(yè)應(yīng)用
從FTP服務(wù)器獲取的XML文件,其格式和內(nèi)容如圖4所示。對(duì)于該文件,在正式處理之前須先預(yù)處理,包括數(shù)據(jù)轉(zhuǎn)碼(GB-2312-->UTF-8)、數(shù)據(jù)標(biāo)準(zhǔn)化(添加后綴名.XML)。如果沒(méi)有經(jīng)過(guò)預(yù)處理操作,Kettle工具就識(shí)別不出它是XML文件。
XML文件的解析需求,可以簡(jiǎn)單描述為<HPXX0000>,將標(biāo)簽內(nèi)的箭頭部分字段下放到<GZLDATA>標(biāo)簽內(nèi)的所有子標(biāo)簽內(nèi);對(duì)于<GZLDATA>中的每個(gè)子標(biāo)簽,開(kāi)發(fā)人員需要將<HPXX0000>標(biāo)簽內(nèi)的數(shù)據(jù)按逗號(hào)分隔,使其作為數(shù)據(jù)表的一列。其?? 余子標(biāo)簽,先按照分號(hào)分割的內(nèi)容作為數(shù)據(jù)表的一行記錄,之后每一行再和<HPXX0000>標(biāo)簽下方的字段構(gòu)成一條記錄,作為數(shù)據(jù)表的一行數(shù)據(jù)。
從文件的內(nèi)容格式來(lái)看,獲取的源文件格式并不是一個(gè)標(biāo)準(zhǔn)的XML格式文件,該文件是缺乏頂級(jí)根標(biāo)簽的,故在數(shù)據(jù)預(yù)處理時(shí)需要添加根標(biāo)簽,本文中對(duì)XML文件添加的根標(biāo)簽是<root></root>。
基于對(duì)原始XML文件數(shù)據(jù)的分析,本文設(shè)計(jì)了如圖5所示的數(shù)據(jù)接入處理流程。
流程在Start之后,首先執(zhí)行的操作是從FTP服務(wù)器上下載文件,該功能只需通過(guò)簡(jiǎn)單配置Kettle組件即可實(shí)現(xiàn)。然后是復(fù)制文件,這一步主要是解決本地文件備份的問(wèn)題。因?yàn)殚_(kāi)發(fā)人員從服務(wù)器上拉取文件之后會(huì)清空服務(wù)器文件夾,所以為了完成數(shù)據(jù)的預(yù)處理,項(xiàng)目組開(kāi)發(fā)了.bat文件。數(shù)據(jù)在完成預(yù)處理之后開(kāi)始解析。轉(zhuǎn)換1操作是通過(guò)Kettle自帶組件從XML中獲取數(shù)據(jù),并將其存放到記錄中,如圖6所示。
Kettle自帶組件可以快速?gòu)臉?biāo)準(zhǔn)XML文件中獲取標(biāo)簽內(nèi)的數(shù)據(jù)內(nèi)容。這樣不僅極大地提高了處理效率,而且在獲取標(biāo)簽內(nèi)容之后,還便于對(duì)后續(xù)字段的選擇。轉(zhuǎn)換2是從記錄中獲取數(shù)據(jù)進(jìn)行解析。在解析過(guò)程中,開(kāi)發(fā)人員首先要對(duì)從記錄中獲取的數(shù)據(jù)進(jìn)行字段拆分、列拆分為多行、字段選擇等操作,然后通過(guò)手動(dòng)設(shè)置的篩選條件完成數(shù)據(jù)篩選,最后為了保證數(shù)據(jù)的唯一性,生成UUID作為該記錄的主鍵。轉(zhuǎn)換流程設(shè)計(jì)如圖7所示。
6 定時(shí)觸發(fā)任務(wù)
Kettle定時(shí)任務(wù)有多種實(shí)現(xiàn)方式,其中之一是采用Start來(lái)定時(shí)。采用該方式須保持客戶端程序的一直開(kāi)啟,若關(guān)閉,Job也會(huì)停止。開(kāi)發(fā)人員也可以采用win任務(wù)計(jì)劃定時(shí),該方式是采用.bat腳本和Kitchen結(jié)合的方式來(lái)實(shí)現(xiàn)的。對(duì)于Linux平臺(tái),開(kāi)發(fā)人員可以采用.sh腳本和Kitchen結(jié)合的方式來(lái)實(shí)現(xiàn),本文采用的就是第三種定時(shí)方式,實(shí)現(xiàn).sh腳本程序如下:
cd /data/kettle/data-integration
export JAVA_HOME=/data/java/jdk1.8.0_141/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
./kitchen.sh -file=/data/kettle/kettle_job/test01.kjb
>>/data/kettle/kettle_log/ceshi_$(date +%Y%m%d).log
7 結(jié)語(yǔ)
本文根據(jù)實(shí)際業(yè)務(wù)需求,基于ETL工具 Kettle 制定了數(shù)據(jù)同步流程與策略,并在此基礎(chǔ)上構(gòu)建了基于Kettle的源數(shù)據(jù)庫(kù)轉(zhuǎn)換同步環(huán)境,設(shè)計(jì)一種新的數(shù)據(jù)同步流程,利用該流程實(shí)現(xiàn)對(duì)運(yùn)輸統(tǒng)計(jì)業(yè)務(wù)數(shù)據(jù)的高效抽取、篩選、轉(zhuǎn)換和同步。同傳統(tǒng)編碼方式相比,該方法數(shù)據(jù)轉(zhuǎn)換不僅能在速度上有大幅度提升,而且在處理復(fù)雜度上大大降低,極大地提高了數(shù)據(jù)接入效率,完全能夠滿足業(yè)務(wù)系統(tǒng)對(duì)目標(biāo)數(shù)據(jù)庫(kù)的查詢、分析需求。同時(shí)本項(xiàng)目還制定了定時(shí)觸發(fā)任務(wù),解決了系統(tǒng)后臺(tái)對(duì)作業(yè)任務(wù)的定時(shí)調(diào)度問(wèn)題,最終實(shí)現(xiàn)了從數(shù)據(jù)源庫(kù)到目標(biāo)數(shù)據(jù)庫(kù)高效自動(dòng)持續(xù)更新的目標(biāo)。未來(lái),開(kāi)發(fā)人員還將不斷完善高數(shù)據(jù)質(zhì)量,優(yōu)化轉(zhuǎn)換作業(yè)流程,以便提升數(shù)據(jù)同步效率,為數(shù)據(jù)轉(zhuǎn)換、同步及遷移工作提供更多思路。
參考文獻(xiàn)
[1]郭德卿,徐國(guó)強(qiáng),李娜.基于Kettle數(shù)據(jù)傳輸與同步方法的研究[J].汽車實(shí)用技術(shù),2021(8):55-57.
[2]邢晨,史章君.Kettle 3.1數(shù)據(jù)同步研究[J].軟件導(dǎo)刊,2013(6):98-99.
[3]趙亞偉.一種基于Kettle的無(wú)損增量數(shù)據(jù)同步方法研究[J].軟件導(dǎo)刊,2019(10):55-58.
[4]趙建勛.基于Kettle的數(shù)據(jù)整合研究與實(shí)踐[J].西安文理學(xué)院學(xué)報(bào),2020(3):28-31,36.
[5]武晉飛.基于Kettle的鐵路客運(yùn)營(yíng)銷數(shù)據(jù)交換平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].鐵路計(jì)算機(jī)應(yīng)用,2019(11):27-31.
[6]韋亞軍,張文文,李冬青.基于Kettle的數(shù)據(jù)轉(zhuǎn)換同步方法研究[J].軟件導(dǎo)刊,2022(8):126-131.
[7]季亞婷,劉樂(lè)群.基于KETTLE的高校多源異構(gòu)數(shù)據(jù)整合實(shí)踐[J].合肥師范學(xué)院學(xué)報(bào),2019(6):59-61.
[8]陳健,左秀然,楊國(guó)良.基于KETTLE的醫(yī)院多源異構(gòu)數(shù)據(jù)集成研究及分析[J].中國(guó)數(shù)字醫(yī)學(xué),2018(3):35-37.
[9]曾汪旺,謝穎夫,胡光闊.醫(yī)院多源異構(gòu)醫(yī)療數(shù)據(jù)整合方法研究[J].中國(guó)衛(wèi)生信息管理雜志,2017(2):197-200,204.
[10]王軍.基于kettle的高職學(xué)生行為數(shù)據(jù)集成研究[J].信息與電腦,2020(3):225-227.
[11]張孟春.面向數(shù)據(jù)集成的分布式ETL研究與設(shè)計(jì)[J].軟件導(dǎo)刊,2017(11):197-199.
[12]程子傲,董博,趙悅,等.基于Kettle的數(shù)據(jù)交換平臺(tái)研究與實(shí)踐[J].遼寧大學(xué)學(xué)報(bào),2018(1):13-18.
[13]崔有文,周金海.基于KETTLE的數(shù)據(jù)集成研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2015(4):153-157.
[14]唐紫珺,蔣亮.基于Kettle的數(shù)據(jù)預(yù)處理應(yīng)用[J].信息技術(shù)與信息化,2021(8):128-130.
(編輯 李春燕)
Design and implementation of railway data access based on Kettle
Wang? Tianju, Xu? Danya, Yin? Wenzhi, Qi Chenhong*
(Information Technology Institute, China Railway Zhengzhou Bureau Group Co., Ltd., Zhengzhou 450000, China)
Abstract: In order to solve the problem of actual business data access analysis processing, make data access, conversion, analysis, synchronization work more efficient and convenient, through the analysis of business requirements and data access integration technology research, carry out the open source ETL tool Kettle research, based on the analysis of Kettle application scenarios and business data characteristics, build the business data conversion synchronization process based on Kettle. According to the actual project case verification, compared with the traditional method, the Kettle-based data conversion access process simplifies the complexity of development and improves the work efficiency, which not only solves the data access transformation problem in the actual business system, but also provides more ideas for other data integration work.
Key words: access; transformation; analysis; integrate; technological process