ETL,Extraction-Transformation-Loading的縮寫,中文名稱爲數據抽取、轉換和加載。
通常隨着業務的發展擴張,產線也愈來愈多,產生的數據也愈來愈多,這些數據的收集方式、原始數據格式、數據量、存儲要求、使用場景等方面有很大的差別。做爲數據中心,既要保證數據的準確性,存儲的安全性,後續的擴展性,以及數據分析的時效性,這是一個很大的挑戰。mysql
名詞解釋:web
- ODS——操做性數據
- DW——數據倉庫
- DM——數據集市
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
1、數據抽取
數據抽取是指把ODS源數據抽取到DW中,而後處理成展現給相關人員查看的數據redis
源數據:sql
- 用戶訪問日誌
- 自定義事件日誌、操做日誌
- 業務日誌
- 各服務產生的日誌
- 系統日誌:操做系統日誌,CDN日誌等
- 監控日誌
- 其它日誌
抽取頻次:數據庫
- 若是沒有特殊要求能夠一天一次,可是須要避開拉去日誌的高峯期
- 對於有實時性要求的日誌,能夠一小時一次,或者直接使用kafka等相關工具收集,須要考慮到系統可否承受
抽取策略:segmentfault
- 因爲數據量較大,通常都是採用增量抽取,可是對於一些特殊場景的數據,好比訂單數據,因爲訂單的狀態會發生變化,而且訂單的量級是可預知和相對較少的,就須要採用全量拉取的策略
- 對於增量拉取的日誌,若是是文件類型,能夠在文件名稱上追加日期,例如 server_log_2018082718.log,這樣就能夠知足按小時拉取的需求
- 對於源數據的保留,考慮到突發狀況,服務器上的源數據至少要保證2天以上的時間
2、數據轉換、清洗
顧名思義,就是把不須要的和不符合規範的數據進行處理。數據清洗最好不要放在抽取的環節進行,考慮到有時可能會查原始數據。通常各公司都會有本身的規範,如下列出幾點僅供參考安全
數據清洗主要包括如下幾個方面:服務器
- 空值處理;根據業務須要,能夠將空值替換爲特定的值或者直接過濾掉;
- 驗證數據正確性;主要是把不符合業務含義的數據作一處理,好比,把一個表示數量的字段中的字符串替換爲0,把一個日期字段的非日期字符串過濾掉等等;
- 規範數據格式;好比,把全部的日期都格式化成yyyy-MM-dd HH:mm:ss的格式等;
- 數據轉碼;把一個源數據中用編碼表示的字段,經過關聯編碼表,轉換成表明其真實意義的值等等;
- 數據標準,統一;好比在源數據中表示男女的方式有不少種,在抽取的時候,直接根據模型中定義的值作轉化,統一表示男女;
- 其餘業務規則定義的數據清洗...
3、數據加載
數據拉取,清洗完以後,就須要展現了。通常是把清洗好的數據加載到mysql中,而後在各系統中使用,或者使用Tableau直接給相關人員展現工具
4、ETL相關工具
ELT相關的工具備不少,這裏只列舉一些經常使用的,並且各公司的技術原型也不同,就須要根據實際狀況來選擇oop
數據抽取工具:
數據清洗
- hive/tez
- pig/tez
- storm
- spark
其它工具
- 數據存儲:hadoop、hbase,ES、redis
- 任務管理:azkaban、oozie
- 數據同步:datax、sqoop
5、ETL過程當中的元數據
試想一下,你做爲一個新人接手別人的工做,沒有文檔,程序沒有註釋,數據庫中的表和字段也沒有任何comment,你是否是會望着窗外,一聲長嘆...
因此元數據管理系統對於數據倉庫來講是必須的,而且相關人員必須定時維護,若是元數據和數據倉庫中的變更不一樣步,那麼元數據系統就形同虛設。
這裏說一句:對於元數據管理不該該是規範,應該是硬性規定。
歡迎訂閱「K叔區塊鏈」 - 專一於區塊鏈技術學習
博客地址:
http://www.jouypub.com
簡書主頁:
https://www.jianshu.com/u/756c9c8ae984
segmentfault主頁:
https://segmentfault.com/blog/jouypub
騰訊雲主頁:
https://cloud.tencent.com/developer/column/72548