ETL DataStage實現V12

3、添加、刪除、修改JOB的調度,對,這裡就是大名鼎鼎的調度,可以在這裡實現,可以按照不同時間調度。對了,本人偶爾發現的小秘密,一個JOB可以加多個調度,而且都起作用的(是不是大家都知道了?)。可惜它的調度方式只能滿足一般的應用,一些複雜的調度,就得我們自己動手了。唉!它咋不能做的再強點呢?

3、刪除JOB,在Designer中也是可以的。

其實有些功能,不只是在一個組件中有,在其他組件中也是可以用的。

2.3    JOB注意事項

一些初學時的注意事項:

1、用文件或者數據庫做源時,做好後最好先“View Data”一下,然後再編譯、運行。這是出錯最多的地方

2、運行完之後,一定要在director中看一下日誌。大部分錯誤都是由於數據庫配置或者文件名稱不對,也可能是定義的列與實際的列不是完全匹配等引起的。其實DS的報錯和其他程序的報錯差不多,大多數是可以看明白是哪些地方,為什麼報錯的

3Server Job對列的定義要求不嚴,類型長度短點長點都無所謂,而Parallel Job長度必須正確,定義的短了,就會截斷數據;如果中間用到Active Stage,在Active Stage中源和目標長度必須一樣,否則會報警告。

4、如果不知道哪個Stage該怎麼用,DS Basic怎麼用,可以查看安裝客戶端時自帶的PDF幫助,這個應該是最詳細的,在網上很難找到這類的幫助。

第3章    ETL設計

ETL的設計是個龐大的工程,不同的項目設計差別很大。對於特別簡單或者特別複雜的項目,在此不做討論,只討論一些常見的項目中利用DS實現ETL的設計。

ETL一般需要考慮的問題有:接口數據的獲取,頻率,數據校驗,接口間及後續處理的關聯關係,入庫方式;優先級,順序亂序執行,出錯處理,重傳處理,調度監控等。除了這些問題,可能還會有個別數據不是格式化數據,文件格式DS無法識別,文件標識的時間與實際數據數據時間不一致等問題。

3.1    設計原則

3.1.1    簡單

說起來簡單,做起來難,呵呵。一直以來都追求簡單,無奈做出來的卻是越來越複雜,越來越難以讓人明白。不過,始終相信簡單就是好的,以此做為設計和開發的第一原則。

3.1.2    全面考濾,重點實現

設計之前,需要全面考濾ETL要實現的各種功能。包括源數據都有哪些,如何得到,數據是如何存儲的,如何調度,出錯如何處理,過了期的數據如何處理,整個ETL過程如何監控等。所有這些項下面都有各種各樣的小項,每個小項又是千變萬化,不可能每項都能想到,即使能想到,也不可能都能設計時考濾進去。所以設計要把大項儘可能的考濾進去,可以用比較容易擴展的設計,包括小項80%的功能。

3.1.3    充分利用各種資源

ETL中涉及到好多系統,用到很多技術,ETL的設計就是要充分利用已有資源的優勢(包括人員,操作系統,DS,數據庫等),綜合運用,達到ETL和其他系統最好的結合。這個可能要求對各種資源了解的比較清楚。

3.1.4    層次分明

稍複雜的ETL,涉及到的面就比較多,除需要考濾實現的難易程度,性能,實現成本,還得考濾程序的穩定性和可擴展性。層次分明將是其實現的一個重要保證

3.1.5    規範嚴明

開始時規範可能定的不夠詳細,不是很準確,但是一定得有,而且相關人員需要知道為什麼要這麼定。這些規範可能包括ShellDS JOB,存儲過程如何命名如何注釋等。也許按照規範可能開始時比較費事,而且看不到任何的好處,等做的多了,時間長了,只要看看規範或者是程序的注釋部分,就能知道程序實現了什麼功能,如何實現,而不用一行行的看代碼。

3.2    總體架構

這裡只是ETL的架構,而不是整個數據倉庫的架構。主要的架構包括以下部分。這個圖只是表示大概部分,監控可以完成整個ETL的監控,或者是對部分重要任務的監控。


3.3    調度

ETL,堆在一塊不運行也沒什麼用,如何能讓它正確的運行起來呢?那就是調度了。

調度是ETL的靈魂。ETL調度的設計,決定了ETL所能實現的功能以及靈活性,也決定了其他ETL部分工作量的大小。

調度涉及到的問題主要有優先級,順序亂序執行,出錯處理,重傳處理,調度監控。

優先級就是任務之間執行的先後緊急順序,將DS Job分為幾個優先級,同一優先級或者不同優先級的JOB間有依賴、互斥等關係。

順序亂序執行,順序就是按照時間的先後順序加載,而亂序則可以不按照時間順序執行,主要是一些高頻率JOB,異常情況不適合人工處理。

        出錯處理、重傳處理,就是要求整個ETL支持重做。

        調度監控,對ETL的處理結果和重要步驟有一個記錄,有問題時發郵件或者短信通知相關負責人。

如果這些都不太複雜,可以用sequence Job,在調度的JOB中用Job Control自編程的方式實現部分任務執行日誌的記錄。對於很複雜的,sequence Job難以實現的,可以自己寫調度程序實現(如Shell, Python , Java)。

3.4    E T L

這部分是整個ETL的主要部分,無論是工作量,還是複雜程度,都是最大的。這部分的實現很大部分與源數據,源數據與目標數據數據的對應有很大關係。如果需要做的很簡單,完全可以一個JOB搞定,沒有必要分的很細。如果比較複雜,可能需要分為E T L三個步驟或者更多,DS的設計也會在項目中經建目錄的方式將其分開,各步驟生成的文件也將以不同的命名方式放在ETL服務器不同的目錄下。

這部分的處理,儘早將沒用的數據過濾,不正確的格式轉換等,使得後來的處理盡量少,盡量簡單。下面有些具體的處理方式,可以在Extract時做,也可以在Transform中做,load時就盡量少做些與入庫不相關的操作了。執行的順序可以是E T L,也可以是E L T,或者是E T L T等。但是做為一個整體,最好有一致的方式處理,而不是不同的任務處理方式千變萬化。

這部分正是DS的強項。

3.4.1    Extract

就是從數據源獲取數據。在數據抽取時,盡量將沒用的數據,不對的數據在抽取時過濾掉,格式等不符合的轉換掉。如果源系統對自己的性能要求比較高,則用對源系統打擾盡量少的方式獲取,如db2exportoracleexp等方式,然後再做處理。

涉及到的功能主要有:

數據範圍過濾,抽取表中所有數據或者根據時間抽取相應數據

字段過濾,只抽取需要的字段,不需要的就不用管

條件過濾,根據抽取條件抽取數據

去除回車換行,如果已抽取成文件,字段中的回車換行將很難去掉

除此之外,還有

格式轉換,特別是時間格式,最好是做成統一格式

賦缺省值,對於空的部分數據,根據需要賦一個缺省值

類型變換,如將number類型轉換為varchar類型

代碼轉換,就是將在不同源系統中同一含義不同的編碼表示轉換成統一的編碼表示,如將代表性別”男”的‘N’‘0’轉換成‘M’

數值轉換,就是度量單位的轉換

3.4.2    Transform

就是將抽取的數據,進行一定的處理,生成目標表所需要的格式,內容。

涉及到的處理主要有:

字段合併、拆分:字段合併就是將多個字段合併成一個字段;拆分就是將一個字段拆成多個字段

數據翻譯,就是不同的數據集進行關聯,從另一個數據集中得到所需要的部分數據

數據聚合,就是做一些sum,max等操作

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營