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