文/郭承湘 陳碩峰 吳帥 陳寧江
已有研究和開發(fā)工作表明,在開發(fā)與食品安全監(jiān)管數(shù)據(jù)相關(guān)的一系列系統(tǒng)時,基本上都是針對單個業(yè)務(wù)域進行設(shè)計的,而這些系統(tǒng)之間并沒有統(tǒng)一的標準,從而導(dǎo)致了各個部門之間的協(xié)同辦公產(chǎn)生了障礙。在此情況下,只有將這些數(shù)據(jù)集中起來,建立統(tǒng)一標準創(chuàng)建數(shù)據(jù)倉庫,完成數(shù)據(jù)共享,這樣才能更準確、有效的對過往的數(shù)據(jù)進行分析,并進行一定時間長度上的預(yù)測和預(yù)警,為預(yù)判以后的事態(tài)發(fā)展以及做出相應(yīng)的決策提供依據(jù)。
ETL(Extract-Transform-Load)是 對 異構(gòu)數(shù)據(jù)進行集成的有效方法,根據(jù)國內(nèi)外眾多實踐得到的共識,ETL規(guī)則的設(shè)計和實施所需工作量約占整個項目的60%~80%,如何設(shè)計正確的、高效的ETL過程已經(jīng)成為數(shù)據(jù)集成構(gòu)建過程中的重要問題[6]。目前主流的ETL工 具 有IBM DataStage、Informatica Powercenter、開 源 的Kettle等。DataStage能夠連接多種類別的數(shù)據(jù)源,還可以處理文本文件和XML文件,但它并沒有真正的recovery機制,并且元數(shù)據(jù)信息是不公開的。Informatica PowerCenter能夠訪問并集成幾乎任何業(yè)務(wù)系統(tǒng)和任何格式的數(shù)據(jù),并能以任意速度進行數(shù)據(jù)交付,具有高可擴展性、高可用性、高性能的優(yōu)點。而且可實現(xiàn)斷點續(xù)傳的功能,支持多用戶操作,具有并行運行能力。
Kettle是一款使用Java編寫的開源ETL工具,具備豐富的SDK,并且開放源碼,可以進行二次開發(fā)。其對于千萬級以下數(shù)據(jù)的處理效率高于上述兩個ETL工具,更加適合本文的研究。因此本文選擇ETL開源產(chǎn)品中應(yīng)用最廣泛的Kettle作為核心,研究分析基于Kettle的食品監(jiān)管數(shù)據(jù)匯集處理。
圖1:數(shù)據(jù)處理系統(tǒng)框架
圖2:食品餐飲違規(guī)問題事實表設(shè)計
圖3:笛卡爾集算法實現(xiàn)字段編碼
本文首先在已經(jīng)做了全量ETL的基礎(chǔ)上,增量數(shù)據(jù)處理模型用于定期的數(shù)據(jù)抽取,該部分在抽取時只抽取改變的部分。
2.1.1 數(shù)據(jù)處理系統(tǒng)框架
基于kettle的安全數(shù)據(jù)匯集處理系統(tǒng),從總體架構(gòu)上分為三個層次:管理調(diào)度層、應(yīng)用功能層、控制環(huán)境。
通過管理調(diào)度,管理員可根據(jù)數(shù)據(jù)的更新周期,制定數(shù)據(jù)的ETL時刻表,然后管理員參照時刻表設(shè)置Kettle的作業(yè)調(diào)度功能,進行ETL作業(yè)運行時刻設(shè)置;ETL功能模塊層次中包含實現(xiàn)圖1中應(yīng)用功能模塊每個ETL步驟的程序;ETL功能模塊的運行需要由相應(yīng)的參數(shù)進行控制,同時在各模塊之間也存在很多控制文件,功能模塊在運行過程中也可能產(chǎn)生拒絕文件,針對功能模塊的運行狀況會有產(chǎn)生一些監(jiān)控信息等等,這些對于ETL功能模塊的運行起到控制與支撐的環(huán)境以及相應(yīng)的維護管理程序構(gòu)成ETL架構(gòu)環(huán)境。
2.2.1 增量數(shù)據(jù)處理模型
本文將食品安全抽檢系統(tǒng)中的檢驗結(jié)果數(shù)據(jù)匯集到數(shù)據(jù)倉庫,按照時間維度(月、季度、年)、檢驗?zāi)康?、抽檢環(huán)節(jié)、食品類別、檢驗項目五個維度對檢驗結(jié)果值進行分析,從而了解抽檢樣品的檢驗結(jié)果值是否超出允許閥。
因為源庫中的業(yè)務(wù)數(shù)據(jù)中存入的都是用中文,例如抽樣地點、檢驗機構(gòu)等都沒有用編碼的方式生產(chǎn)維表,所以在ETL過程中需要對可編碼的數(shù)據(jù)進行編碼,建立索引,并配置維表,從而提升數(shù)據(jù)分析時的計算效率。編碼后的分類數(shù)據(jù)均有分類代碼,目標表與維表使用分類代碼進行映射,圖2為部分目標表設(shè)計。
如圖3所示利用笛卡爾集表關(guān)聯(lián)的方式對源數(shù)據(jù)中的檢驗項目、食品類別、抽樣地點、檢驗機構(gòu)進行編碼,替換原來的中文為對應(yīng)的維表的代碼。并對填充內(nèi)容為空的數(shù)據(jù)進行排除,寫入ETL清洗過程流失數(shù)據(jù)表。
2.2.2 增量ETL的KETTLE實現(xiàn)
2.2.2.1 Job文件設(shè)計
如圖4所示,首先獲取本次抽取的起始時間寫入緩存,然后設(shè)置本次數(shù)據(jù)增量的起始時間戳并獲取上一次抽取數(shù)據(jù)更新時間最新的日期作為增量抽取的開始時間戳,用當(dāng)前時間作為本次增量的結(jié)束時間戳。然后進行數(shù)據(jù)清洗,將清洗完成的數(shù)據(jù)加載到食品安全檢驗項目事實表中,最后計算表中的記錄數(shù)。
2.2.2.2 轉(zhuǎn)換文件設(shè)計
如5所示,先獲取檢驗項目維表數(shù)據(jù)和上一步驟的結(jié)果集,采用笛卡爾集算法為結(jié)果集進行檢驗項目編碼。然后清洗檢驗項目為的空記錄,去除ETL過程臨時字段,保留需要的字段。最后將本轉(zhuǎn)換的結(jié)果集寫入kettle臨時儲存區(qū),并傳輸給JOB的下一個節(jié)點。
圖4:增量數(shù)據(jù)處理JOB文件設(shè)計
圖5:增量數(shù)據(jù)處理轉(zhuǎn)換文件設(shè)計
我們對所實現(xiàn)的系統(tǒng)進行了實驗和測試。運行環(huán)境主要為:ETL服務(wù)器主要配置為8核CPU、32GB內(nèi)容;軟件配置為Linux操作系統(tǒng)、Oracle數(shù)據(jù)庫、ETL工具kettle。
圖6為部分增量數(shù)據(jù),經(jīng)過測試,該增量數(shù)據(jù)處理機制完全可以實現(xiàn)在60min內(nèi)完成每月一次的增量數(shù)據(jù)匯集處理。
本文通過研究基于kettle的大數(shù)據(jù)處理機制,完成了對異構(gòu)的食品監(jiān)管數(shù)據(jù)的統(tǒng)一化、自動化匯集處理的模型設(shè)計及相應(yīng)的Kettle實現(xiàn),后續(xù)工作將會利用這套模型處理過的數(shù)據(jù)來進行分析與預(yù)測,為食品監(jiān)管部門提供更大的幫助。