劉泱
(內(nèi)蒙古自治區(qū)氣象信息中心,內(nèi)蒙古 呼和浩特 010010)
目前,全國(guó)綜合氣象信息共享平臺(tái)[1](以下簡(jiǎn)稱CIMISS)和氣象大數(shù)據(jù)云平臺(tái)(以下簡(jiǎn)稱天擎)是全國(guó)氣象部門信息化的核心平臺(tái),其存儲(chǔ)的臺(tái)站信息是各業(yè)務(wù)系統(tǒng)的重要數(shù)據(jù)支撐。CIMISS數(shù)據(jù)環(huán)境由ORACLE數(shù)據(jù)庫組成,天擎數(shù)據(jù)庫環(huán)境由虛谷數(shù)據(jù)庫和GBase數(shù)據(jù)庫組成,當(dāng)站網(wǎng)信息發(fā)生變動(dòng)時(shí),則需要對(duì)所有數(shù)據(jù)庫的站網(wǎng)信息表進(jìn)行修改,人為修改不僅工作量大,而且存在改錯(cuò)、誤刪的風(fēng)險(xiǎn)。ETL技術(shù)的應(yīng)用,大幅度地減少了各個(gè)數(shù)據(jù)庫同步更新開發(fā)工作,技術(shù)人員只需在ETL工具的圖形界面上定制工作流程,即可流程化地實(shí)現(xiàn)各個(gè)數(shù)據(jù)庫表之間的站網(wǎng)信息同步,下面將對(duì)臺(tái)站信息同步的具體實(shí)現(xiàn)進(jìn)行介紹。
站網(wǎng)信息同步更新設(shè)計(jì)思路如下:①CIMISS和天擎數(shù)據(jù)環(huán)境的站網(wǎng)信息表結(jié)構(gòu)完全一致,首先,設(shè)計(jì)一張與站網(wǎng)信息表結(jié)構(gòu)完全一致的臺(tái)站信息表,添加一個(gè)是否更新字段,初始化為0,將待更新的臺(tái)站信息存儲(chǔ)至該表;②其次,基于ETL工具編排同步更新作業(yè),當(dāng)監(jiān)測(cè)到有未更新的臺(tái)站信息時(shí),即更新字段為0的記錄,則促發(fā)作業(yè)啟動(dòng),拼接臺(tái)站信息更新的SQL語句,并發(fā)送至各個(gè)數(shù)據(jù)庫完成更新;③最后,更新成功后,將更新字段設(shè)置為1。
ETL是Extract-Transform-Load的縮寫[2],Extract是數(shù)據(jù)抽取、Transform是數(shù)據(jù)轉(zhuǎn)換、Load是數(shù)據(jù)裝載的過程。文章應(yīng)用的ETL工具是Kettle,可以在Window、Linux、Unix不同的操作系統(tǒng)上運(yùn)行。Kettle可以對(duì)不同數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行管理,通過提供圖形化頁面,技術(shù)人員無需編寫代碼即可實(shí)現(xiàn)站網(wǎng)信息同步的業(yè)務(wù)邏輯。
虛谷數(shù)據(jù)庫是以分布式[3]架構(gòu)為基礎(chǔ)的關(guān)系型數(shù)據(jù)庫,實(shí)現(xiàn)了傳統(tǒng)關(guān)系型數(shù)據(jù)庫的所有功能且提供了多種數(shù)據(jù)庫訪問接口,如JDBC、ODBC、C-API、Python、GO等,具有數(shù)據(jù)存儲(chǔ)高可用、工作節(jié)點(diǎn)高可用、多網(wǎng)絡(luò)并行、高性能、高擴(kuò)展、高安全和易用性等優(yōu)點(diǎn)。
GBase是南大通用數(shù)據(jù)技術(shù)有限公司推出的自主品牌數(shù)據(jù)庫產(chǎn)品,是國(guó)內(nèi)第一個(gè)列存分析型數(shù)據(jù)庫,具有獨(dú)特的列存儲(chǔ)、透明自適應(yīng)壓縮、智能索引、雙向并行、高速數(shù)據(jù)加載等優(yōu)點(diǎn)。
創(chuàng)建一張臺(tái)站信息元數(shù)據(jù)表,表的字段信息包括站名、站號(hào)、經(jīng)度、緯度、海拔高度、盟市、旗縣、行政區(qū)域編碼、更新狀態(tài)等帶同步的臺(tái)站基礎(chǔ)信息。將待更新的臺(tái)站信息錄入到該表中,更新狀態(tài)字段為0時(shí),表示需要更新,為1時(shí)則表示更新成功。
臺(tái)站信息同步任務(wù)由作業(yè)和轉(zhuǎn)換兩部分組成[4]。其中作業(yè)是步驟流,表示完成同步任務(wù)的某一個(gè)階段,每個(gè)步驟完成的是獨(dú)立的一件事情,按照工作的先后順序執(zhí)行,從而形成一個(gè)工作流;轉(zhuǎn)換是數(shù)據(jù)流,指從輸入控件(Input)到輸出控件(Output)之間的數(shù)據(jù)流動(dòng),針對(duì)的是在數(shù)據(jù)流動(dòng)過程中的每一行記錄、每一列數(shù)據(jù)的處理。臺(tái)站信息同步任務(wù)包含1個(gè)作業(yè)和2個(gè)轉(zhuǎn)換,具體設(shè)計(jì)如下。
3.2.1 臺(tái)站信息同步作業(yè)設(shè)計(jì)
臺(tái)站信息同步作業(yè)是將轉(zhuǎn)換1——獲取待同步的臺(tái)站信息列表和轉(zhuǎn)換2——同步臺(tái)站信息列表這兩個(gè)轉(zhuǎn)換按照先后順序連接起來,實(shí)現(xiàn)臺(tái)站信息同步功能,作業(yè)流程如圖1所示。
3.2.2臺(tái)站信息同步轉(zhuǎn)換設(shè)計(jì)
轉(zhuǎn)換1——獲取待同步的臺(tái)站信息列表,主要用到的轉(zhuǎn)換對(duì)象是“表輸入”和“復(fù)制記錄到結(jié)果”?!氨磔斎搿鞭D(zhuǎn)換對(duì)象是通過SQL語句獲取待同步的臺(tái)站信息,“復(fù)制記錄到結(jié)果”轉(zhuǎn)換對(duì)象是用來存儲(chǔ)表輸入抽取臺(tái)站信息,轉(zhuǎn)換流程如圖2所示。
圖2 獲取待同步的臺(tái)站信息列表轉(zhuǎn)換流程
轉(zhuǎn)換2——同步臺(tái)站信息列表,主要用到的轉(zhuǎn)換對(duì)象是“表輸入”“JavaScript代碼”“插入/更新”“寫日志”“執(zhí)行SQL語句”。流程如圖3所示。
圖3 同步臺(tái)站信息列表轉(zhuǎn)換流程
處理詳情過程如下:①“表輸入”轉(zhuǎn)換對(duì)象是待同步更新的臺(tái)站信息列表;②“JavaScript代碼”轉(zhuǎn)換對(duì)象用來轉(zhuǎn)換臺(tái)站類型編碼的,CIMISS臺(tái)站類型是**兩位字符串,天擎臺(tái)站類型是00**四位字符;③“插入/更新”轉(zhuǎn)換對(duì)象用來同步臺(tái)站信息,包括CIMISS業(yè)務(wù)系統(tǒng)的ORACLE數(shù)據(jù)庫一張臺(tái)站信息表、天擎業(yè)務(wù)系統(tǒng)虛谷數(shù)據(jù)庫三張臺(tái)站信息表和GBASE數(shù)據(jù)庫一張臺(tái)站信息表;④“寫日志”轉(zhuǎn)換對(duì)象用來記錄執(zhí)行同步指令的異常記錄日志,便于排查故障原因;⑤“執(zhí)行SQL語句”轉(zhuǎn)換對(duì)象用來更新同步狀態(tài),當(dāng)所有數(shù)據(jù)庫完成站網(wǎng)信息同步后,則將狀態(tài)字段置為1。
ETL是客戶端工具,臺(tái)站信息同步任務(wù)編排后,需要在工具中點(diǎn)擊“運(yùn)行”按鈕才能執(zhí)行,不符合智能運(yùn)維的思路。為了彌補(bǔ)此缺陷,部署了KETTLE調(diào)度管理平臺(tái)[5],將臺(tái)站信息同步任務(wù)添加到調(diào)度平臺(tái),按照?qǐng)?zhí)行策略,即可自動(dòng)運(yùn)行,配置過程如下。
添加執(zhí)行策略如圖4所示。添加作業(yè)任務(wù)如圖5所示。
圖4 添加任務(wù)執(zhí)行策略
圖5 添加作業(yè)任務(wù)
文章所述的臺(tái)站信息同步任務(wù)已在日常業(yè)務(wù)工作中開展應(yīng)用,并在CIMISS業(yè)務(wù)系統(tǒng)和天擎業(yè)務(wù)系統(tǒng)并行期間發(fā)揮了重要作用,業(yè)務(wù)人員只需將變更的臺(tái)站信息添加至待更新臺(tái)站信息元數(shù)據(jù)表中,調(diào)度任務(wù)監(jiān)測(cè)到后,即可自動(dòng)向各個(gè)數(shù)據(jù)環(huán)境的數(shù)據(jù)庫進(jìn)行同步更新,極大地降低了人工操作的錯(cuò)誤率,提高了工作效率,保證了臺(tái)站信息更新的正確性和完整率。2021年以來,通過該同步任務(wù)共更新了2 463條件臺(tái)站信息。