淺談ETL架構中ODS的做用以及如何在HaoheDI中自動建立ODS表

什麼是ODS表?前端

在ETL架構中,源數據不多會直接抽取加載到數據倉庫EDW,兩者之間每每會設置一個源數據的臨時存儲區域,存儲數據在清洗轉換前的原始形態,一般被你們稱作操做型數據存儲,簡稱ODS,在Kimball維度建模理論中,將其稱之爲Staging Area(意爲部隊從一個戰場轉往另外一個戰場的集結地),翻譯過來稱之爲數據登臺區,如圖所示:數據庫

img_20190307_112911

上圖摘自Ralph Kimball的《數據倉庫生命週期工具箱》數據結構

爲何須要ODS?架構

ODS在整個數據中心體系架構中的具備很是重要的做用,體如今如下幾點:運維

  1. 統一源數據的數據格式,下降數據清洗轉換的複雜性

通常的數據倉庫應用系統都具備很是複雜的數據來源,這些數據存放在不一樣的地理位置、不一樣的數據庫、不一樣的應用之中,從這些業務系統對數據進行抽取並非一件容易的事,好比有時源和目標不能直接連通,數據可能會用文件方式上傳上來,這就須要將原始數據先落地到ODS中。所以,ODS用於存放從業務系統直接抽取出來的數據,這些數據從數據結構、數據之間的邏輯關係上都與業務系統基本保持一致,所以在抽取過程當中極大下降了數據轉化的複雜性,而主要關注數據抽取的接口、數據量大小、抽取方式等方面的問題。各類原始數據以統一的格式存放在一個數據庫中,更加便於後續的數據清洗與轉換。工具

  1. 保留原始數據當時時點的快照,便於數據轉換後的校驗排錯和批次重跑

業務系統中的數據是會發生增刪改變化的,尤爲是像客戶、產品、機構這樣的維度數據,其狀態和屬性都會隨着時間不斷改變,而數據倉庫是須要記錄並分析其歷史狀態的,如緩慢變化維(拉鍊表)和快照型事實表,在獲得最終的統計分析結果以前,數據會通過一層一層的轉換加工,期間會有大量的計算和處理邏輯,在ETL開發和運維過程當中,常常會發現某些公式或處理邏輯有誤,修改以後不得不重跑以前一系列的批次數據,若是以前沒有保留這些時點上的原始數據,則不少數據重跑將變得不可能,由於源系統中的部分數據已經發生了變化,另外將數據快照下來也便於和前端統計查詢結果進行校驗覈對,以便找出出錯緣由。spa

  1. 轉移一部分業務系統細節查詢的功能,並能夠支持實時數據的查詢統計

在數據倉庫創建以前,大量的報表、分析是由業務系統直接支持的,在一些比較複雜的報表生成過程當中,對業務系統的運行產生至關大的壓力。ODS的數據從粒度、 組織方式等各個方面都保持了與業務系統的一致,那麼原來由業務系統產生的報表、細節數據的查詢天然可以從ODS中進行,從而下降業務系統的查詢壓力。另外因爲從源數據到最終的分析結果,須要經歷較長時間的ETL轉換,因此一些對實時性要求比較高的查詢分析是能夠直接從ODS中取數的,好比風控預警和實時儀表盤。翻譯

ODS表長什麼樣?設計

ODS一般採用數據庫進行存儲,只存儲對數據分析有價值的源數據,數據結構一般和源很是類似,在源表結構基礎上會擴充字段以表示數據來源、數據日期、導入時間等審計信息。一個ODS表的例子:3d

clipboard

這個表存儲天天按時間戳增量抽取的血糖檢測記錄,名稱用O_前綴進行標識。紅色區域的字段基本上和源表結構保持一致,也能夠只存後期數倉中須要的字段,去掉一些沒有必要的字段,另一些字段類型也能夠作簡單的改變,但要確保能夠記錄原始數據的原貌。開頭的兩個字段是ODS表新增的審計字段,其中ETLBATCHID表示數據的批次號,用於表示是哪一個時期(點)的數據,若是數據天天一個批次的話,這裏將會存一個數字型日期如20190301(YYYYMMDD),若是是每小時一個批次的話,這裏可能會存一個帶小時的數字型時間如2019030108(YYYYMMDDHH),之因此存成數字型,是由於數字型佔的空間更小,檢索更快,另外在書寫SQL是也比較簡便。固然也可根據須要設爲字符型或日期型。PROCESSTIME字段用來表示數據被抽取加載到ODS表的系統時間,該字段也能夠省略。另外若是ODS表中的數據來自於多個數據源,則能夠增長一個審計字段來表示數據的來源。

對於某些沒有時間戳的維度表、代碼表,其對應的ODS表要如何設計呢?其實也和上邊的表同樣,只須要在源表的結構以前增長批次號等審計字段便可,好比用戶信息表:

clipboard[1]

若是沒法經過時間戳或操做日誌來判斷哪些用戶信息發生了改變的話,則每次抽取數據時選擇全量抽取,即將源表中的這個時點的數據所有抽到ODS表,因爲每次的快照都已存儲下來,雖然有較大的冗餘,但卻很是便於在後續的ETL中利用比對的方式來判斷哪些數據發生了變化。若是數據量較大,也能夠採用表分區的方式。

如何快速批量的建立ODS表?

源系統的數據庫類型多種多樣,其中的表成百上千,針對這麼多須要抽取的源表,有什麼簡便的方式能快速生成對應這些源表的ODS表嗎?HaoheDI提供了一個的功能能夠快速生成這些表,操做步驟以下:

一、在數據鏈接中選擇要生成ODS表的目標數據庫(數據中心),點擊建立ODS表按鈕:

clipboard[2]

二、彈出頁面後,點擊「選擇源表」,選擇對應的源鏈接和源表。如圖:選擇源數據庫LOCALMYSQL中的這6張源表做爲在HYDW目標數據庫中對應的ODS表的模板。

clipboard[3]

三、刪減部分表中沒必要要的字段,這樣在ODS表中將不會建立這個字段,默認是建立所有字段。

clipboard[4]

四、設置ODS表的命名規則,好比在源表名以前增長O_,也能夠在表名以後添加後綴。

clipboard[5]

五、在自定義字段一欄中,選擇要在ODS表中添加的審計字段:

clipboard[6]

示例:每一個表都將建立三個審計字段,設定其名稱、字段類型、字段長度以及建立位置,保存。

clipboard[7]

六、其它表若是各項設定相同則選擇同上便可,按Ctrl鍵選擇所有或部分表,點擊建立ODS表按鈕

clipboard[8]

顯示ODS表建立成功或失敗的信息,建表語句在後臺hhdilogs\common\日誌中查看。

clipboard[9]

七、在目標數據鏈接的元數據中將新生成的ODS表結構導入:

clipboard[10]

查看錶結構,檢查表結構是否符合設定的規則。

clipboard[11]

 

建立完ODS表後,能夠經過導入Excel模板的方式批量建立數據抽取任務。

相關文章
相關標籤/搜索