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