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