一個較為詳細的ETL系統實現方案
1 ETL流程及排程設計(ETL Schedule)(PSP)
1. ETL排程的目標
快速見效系統要抽取39家分行四個系統的資料進行加工處理,資料從下傳檔案到ODS庫,ODS庫到LDM,再計算PI值和彙總PI,整個ETL處理過程需按一定步驟和滿足某些條件進行,某些關鍵的檔案如匯率資料、機構表等都會影響整個ETL的處理,因此,快速見效的ETL處理流程將是一個比較複雜的過程。
考慮到將來ETL處理的多樣性和複雜性,引入了Job的概念,將ETL處理過程分為一個一個的Job,Job可能是清洗\載入\轉換,也可能是PI加工。為了對複雜的ETL處理過程更好的排程和監控,專門設計一個ETL排程系統。通過ETL排程系統的開發使用,將清晰、高效地通過Job排程的方式處理快速見效的ETL過程。
2. ETL排程功能說明
排程維護
1) 排程系統引數維護,對排程系統的公共引數:期數、程序數、資料日期、本期開始日期和本期結束日期進行設定和修改。
2) 下傳檔案資訊維護,維護所有區域的下傳檔名稱、檔案狀態、檔案資料日期和對應區域的歸屬關係。
3) 作業步定義與維護,定義作業對應的實際ETL處理過程,生成作業編號,定義作業型別和作業的驅動關係,作業的執行所需要的條件。
4) 排程異常處理,對排程過程中出現的異常情況進行處理,提供錯誤查詢、出錯重跑功能。
日誌管理
1) 排程過程日誌,管理記錄排程中的主要過程和異常資訊,如排程開始、排程完成、資料庫操作異常和讀寫檔案異常的日誌。
2) Job執行日誌,管理記錄Job執行資訊的日誌,提供該日誌的查詢、刪除和執行狀態重置功能。
3) Job詳細事件日誌,管理記錄Job執行中的詳細事件(清洗記錄條數、資料庫具體操作情況)的日誌,提供對日誌的查詢、刪除操作。
作業排程
正常情況下的作業排程,對整個ETL過程進行排程,提供分段提交處理和自動提交處理功能。
可排程的Job型別
1) C程式(清洗),ETL排程提供與C程式的介面,從而可以對C程式進行排程。
2) 用C封裝的SQLLDR(載入),將ORACLE SQLLDR封裝在C程式中進行排程。
3) PROC程式(合併、轉換),對合並和轉換過程,排程提供相應的介面,從而對ORACLE的PROC程式進行排程。
4) 儲存過程(轉換),將儲存過程封裝在PROC程式中進行排程。
5) DataStage(PI加工),排程系統提供了與DataStage的介面,可以對DataStage各個種類的Job進行排程。
作業步(ETL_Step)的功能型別及資料處理
0. 檔案FTP: 將各個分行的源業務系統(NLNS、SBS、NACS)的以預定的檔案格式以FTP方式通過中行網路傳輸到QUICK WIN專案系統的ETL伺服器。
1. 檔案註冊:0中FTP的源資料檔案,經過解壓縮後,必須在QUICK WIN專案系統中註冊,只有經過檔案註冊過程後QUICK WIN專案系統才能確認“那些分行的源資料” 已經正確到達,ETL系統就可以相應的處理流程。
2. 資料清洗:從各分行FTP來的源資料檔案,可能存在非法資料或冗餘資料或者資料規則標準不統一,而且檔案格式上也不能被QUICK WIN專案的ETL過程立即使用,因此必須對資料檔案進行資料清洗(刪除非法、冗餘資料、統一資料規則標準、轉換成QUICK WIN專案的ETL過程能“載入”處理的檔案格式)。
3. 資料載入:將清洗後的資料(檔案格式)通過SQL LOADER載入到ORACLE資料庫相應的資料庫表中。
4. ODS資料合併:將各個分行的相同型別的源業務系統資料合併到ORACLE資料庫中同一張資料表中。
5. LDM資料加工:面向業務生產資料(ODS資料庫表中的資料)根據“QUICK WIN分析模型”將資料轉換、加工成面向分析主題的“分析型資料”。
6. PI加工:根據業務需求、業務規則和分析模型,從LDM資料表中加工出QUICK WIN所需的PI。
7. 報表加工:根據業務需求、業務規則和分析模型,從LDM資料表和PI表中中加工出QUICK WIN所需的報表。
8. ETL排程程式:排程ETL加工各個過程的執行。
9. 監控程式:監控ETL過程的執行狀態(加工進度、加工效率、成功、警告、錯誤等)資訊,及時向系統的執行維護人員報告系統執行狀態。
作業步(ETL_Step)的流程和依存關係。
1) 清洗型別的Job的執行依賴於相應下傳檔案的狀態,必須是在下傳檔案檢查及登記後才能進行清洗Job的排程。
2) ODS層載入型別Job的執行依賴於相應的清潔檔案是否由清洗程式生成,即相應的清洗Job是否正確執行完成。
3) 從ODS到LDM的資料轉換依賴ODS層的相關資料是否齊備,即相應的載入Job是否正確執行完成。
4) PI加工的進行依賴LDM層資料,即相應的轉換Job是否正確執行完成。
5) 根據資料依賴關係,分割槽域進行作業排程,各區域之間的ETL處理可以並行處理。
作業排程方式
1。。。。。。。
2. 排程策略
採取條件驅動的策略來進行Job的排程,Job一滿足驅動條件便開始執行。針對快速見效系統的ETL情況,定義四種類型的驅動條件:
1) 前導Job驅動
ETL過程中各個操作需按一定次序進行,前導Job表示ETL過程中先要進行處理的Job,Job的前導Job可以有多個
2) 下傳檔案驅動
當下傳檔案未下傳完畢時,下傳檔案清洗不能進行,因此,下傳檔案通常作為清洗檔案的驅動條件,當系統檢測到下傳檔案已下傳並正確後,便可進行相應的清洗,驅動Job執行的下傳檔案可能有多個,
3) 時間驅動
當到達某個時點時,Job便開始執行
4) 上述三種條件綜合驅動
要上述三種情況至少兩種均滿足,Job才能執行。
3. Job的併發設計
每個Job只要滿足了驅動關係後,便開始以後臺方式執行。這樣便實現了不同區域和同一區域的Job的最大限度的並行。考慮系統資源的情況,可以事先設定最大並行數。
4. 併發衝突設計
當並行跑的Job都需要共同使用同一資源的時候,會產生資源佔用的衝突,ETL過程中通常的衝突, 用令牌的方式來避免衝突,只有獲得令牌的JOB才能跑,否則等待令牌釋放。
定義資料轉換流程中檢查點和核對點
1) 下傳檔案,下傳檔案與源系統資料進行比較檢查,核對下傳資料準確性。
2) 清潔檔案,將清潔檔案與下傳檔案進行比較檢查,從而可判斷清洗處理過程的正確性。
3) ODS庫表,將ODS庫表中的資料與下傳檔案中資料進行比較檢查,從而可判斷載入處理過程的正確性。
4) LDM庫表,將LDM庫表中的資料與ODS庫表中資料進行比較檢查,從而可判斷轉換處理過程的正確性。
5) PI值,將PI值與LDM層相關的庫表進行比較檢查,從而可判斷PI計算處理過程的正確性。
日誌資訊設計
1) 排程過程日誌。以檔案的方式存在,用於記錄Job排程中的主要過程和異常資訊,如排程開始、排程完成、資料庫操作異常和讀寫檔案異常。
2) Job執行日誌。資料庫表方式存在,給Job的排程提供必要的資訊,是Job排程策略計算的依據,排程模組和Job之間的介面之一。
3) Job詳細事件日誌。資料庫表方式存在,記錄ETL處理過程中的詳細資訊,如清洗記錄成功條數、失敗條數或資料庫操作情況(INSERT\UPDATE\DELETE)。
給出異常處理設計:所有被拒絕的行、可接受的錯誤數以及合理退出的方式
通知設計:重要資訊(成功/失敗)的通知
1. 成功退出
1) 分段提交方式,當分段提交的當次任務都正確完成,即Job執行狀態臨時表中登記的作業狀態全部為完成時,退出ETL排程。
2) 自動提交方式,噹噹期所有的任務都正確完成,即Job執行狀態表中登記的作業狀態全部為完成時,退出ETL排程。
2. 失敗退出
1) 關鍵作業異常,關鍵作業執行異常時,影響剩下的作業不能執行時,則退出ETL排程。
2) 超過ETL時限,當超過預先設定的ETL 時限時,退出ETL排程。
3) 資料庫異常,當不能正常操作資料庫時,退出ETL排程。
4) 作業系統異常,當發生作業系統異常,導致程式不能正常執行,如檔案系統異常導致讀寫檔案錯時,需要退出ETL排程。
5) 手工退出,需要人為干預ETL排程的時候,能以手工操作的方式退出ETL排程。
給出各個階段號說明 給出表格:表6-N ETL_Step編號表(ETL控制引數)
ETL 排程優先級別
按Job驅動關係進行Job的排程,前導Job優先於後續Job。
ETl流程及排程模組說明
模組概要說明
模組概要說明(總體層次)
模組名稱 模組編號 開發工具/環境 模組功能說明 備註
作業排程 J01 AIX+Shell+C ETL排程主模組,負責整個ETL過程的排程處理。 維護員
作業管理 J02 EXECL+BRIO+C 定義作業步對應的實際ETL處理過程,生成作業編號,定義作業型別和作業的驅動條件。 管理員
異常重跑 J03 AIX+Shell+C 當ETL執行出現異常時,提供斷點重跑機制。 維護員
引數管理 J04 Brio EIS 排程系統的公共引數:期數、程序數、資料日期、本期開始日期和本期結束日期進行設定和修改。 管理員
日誌管理 J05 BrioSDK,EIS 包括排程過程日誌、Job執行日誌和Job詳細事件日誌的查詢和刪除。 管理員
模組概要說明(明細層次)
模組名稱 模組編號 模組型別 開發環境 模組功能說明 備註
CTLINIT J01_01 作業排程 AIX,PROC 檢查輸入引數和驅動關係,初始化資源令牌狀態/Job執行狀態/下傳檔案狀態。
UNCOMPR J01_02 作業排程 AIX,PROC,SHELL 檢測下傳目錄下的壓縮/打包的檔案,並將這些檔案解壓縮/展開,之後移動到非下傳目錄下。
FILEREG J01_03 作業排程 AIX,PROC 根據下傳檔案控制表 檢查各檔案頭的控制資訊,將檢查結果記錄在下傳檔案控制表中。
CHKREGJOB J01_04 作業排程 AIX,PROC 掃描Job執行狀態(或臨時)表看所有(或本次提交需要完成的)Job是否完成,根據Job執行日誌資訊登記完成的Job(在Job執行狀態表登記)。
CALREGJOB J01_05 作業排程 AIX,PROC 根據Job執行狀態/下傳檔案狀態/ Job驅動關係計算可已執行的Job,並在Job執行狀態表中將這些Job登記為“就緒“狀態。
JOBRUN J01_06 作業排程 AIX,PROC,SHELL 依據當前程序數/資源令牌佔用清況發出排程一個Job執行的命令,並登記Job執行狀態為“正執行“。
CRTJOB J02_01 作業管理 EXECL 生成作業列表和作業對應的驅動條件。
CHKJOB J02_02 作業管理 PROC 檢查作業列表的合法性,包括驅動關係的合理性檢查。
RERUN J03_01 異常重跑 AIX,PROC,SHELL 當ETL執行出現異常時,提供斷點重跑機制。
PARADM J04_01 引數管理 BRIO EIS,SQLPLUS,SHELL 排程系統的公共引數:期數、程序數、資料日期、本期開始日期和本期結束日期進行設定、修改及查詢。
LOGADM J05_01 日誌管理 BRIO EIS,SQLPLUS 包括排程過程日誌、Job執行日誌和Job詳細事件日誌的查詢和刪除。
ETL流程及排程的模組設計說明表(設計階段)
見附件《ETL排程詳細設計.doc》
給出ETL流程及排程的程式設計說明表(實現階段):參見 “1.15節”
1.2 ETL監控(ETL Monitor) (PSP)
ETL監控結構設計,
ETL監控主要功能概述
1) ETL排程檢測下傳檔案狀態,並登記到下傳檔案狀態表中,通過Hyperion Client設計對下傳檔案狀態查詢的BQY文件,釋出到Hyperion Performance Suite 8 Server,再通過Http或直接通過ODBC進行BQY查詢來獲取下傳檔案狀態,從而實現了檔案傳輸監控功能。
2) 當某個區域的某些檔案清洗完成時,ETL排程在Job執行狀態表中登記該區域相應清洗Job的狀態(異常或完成);當檔案載入、轉換或加工完成時,ETL排程同樣方式在Job執行狀態表中登記相應Job的狀態,通過設計對Job執行狀態查詢的BQY,併發布到Hyperion Performance Suite 8 Server,再通過Http或直接通過ODBC進行BQY查詢來獲取Job的當前狀態,從而實現了載入、轉換和加工的監控功能。
3) 對Job的執行情況(開始時間、結束時間)的監控通過設計查詢Job執行日誌表的BQY文件來實現,對Job的詳細事件的監控通過設計查詢Job詳細事件日誌表的BQY來實現。
4) 對排程的整體情況的監控,則可直接通過TELNET檢視排程過程日誌,便能知道排程的完成情況和異常情況(資料庫錯、引數非法或作業系統錯等)。
? ETL監控模組說明:
? ETL監控的模組概要說明
模組概要說明(明細層次)
模組名稱 模組編號 模組型別 開發環境 模組功能說明 備註
FILEMON J06_01 ETL監控 BRIO,EIS 監控各個區域的下傳檔案傳輸情況和檔案狀態。
JOBMON J06_02 ETL監控 BRIO,EIS 對各個區域的清洗、載入、轉換和加工過程的完成情況進行監控。
EVTMON J06_03 ETL監控 BRIO,EIS 對JOB的執行開始時間、結束時間和JOB執行過程中的詳細操作情況進行實時監控。
MAINMON J06_04 ETL監控 BRIO,EIS 對排程的整體情況的監控,包括排程成功完成、異常退出、資料庫錯、引數情況和作業系統出錯進行監控