数据ETL
1. ETL之數據清洗
數據清洗的概念:“數據清洗確保無法辨認的數據不會進入數據倉庫。無法辨認的數據將影響到數據倉庫中通過聯機分析處理(OLAP)、數據挖掘和關鍵績效指標(KPI)所產生的報表。”數據清洗, 是整個數據分析過程中不可缺少的一個環節,其結果質量直接關系到模型效果和最終結論。
在操作中,數據清洗通常會占據分析過程的50%—80%的時間。所以數據清洗的過程就顯得尤為重要,在下面的圖上我們可以看到,數據清洗操作是在數據抽取完成之后,然而事實上,數據清洗的操作在整個ETL過程中都會有。比如,我們在數據抽取時會過濾掉某些字段,去除掉重復字段等;在數據加載時,我們會通過查詢語法將部分不需要的信息剔除掉。這些都可以算是對數據的清洗。這樣做的目的是降低我們數據清洗過程的復雜度,提高效率。
?
數據清洗的步驟大體可以分為這么幾步:
1.1預處理階段:
1.1.1 將數據導入處理工具。也就是我們數據的抽取過程,將數據導入到處理工具中。
1.1.2 看數據。這里包含兩個部分:一個是看元數據,包括字段解釋、數據來源、代碼表等等一切描述數據的信息;再有是抽取一部分數據,使用人工查看方式,對數據本身有一個直觀的了解,并且初步發現一些問題,為之后的處理做準備
1.2分析處理階段:
1.2.1缺失值清洗:
1.2.1.1去除不需要的字段:對某些字段內容,數據分析過程可能用不上,就需要將其刪除,直接delete,建議清洗的每一步都做備份,防止錯刪。
1.2.1.2填充缺失內容:該字段需要使用,但是某些數據上該字段缺失,這時候需要我們給上默認值,或者計算結果(均值、中位數、眾數等)填充上去
1.2.1.3重新取數:如果某些字段數據非常重要,但是數據缺失又很嚴重,這時候就需要我們通過其他渠道重新獲取數據將數據填充進去。
1.2.2格式內容清洗:
1.2.2.1時間日期、數值、全半角顯示不一致等:這種問題通常與輸入端有關,在整合多來源數據時也有可能遇到,將其處理成一致的某種格式即可。
1.2.2.2內容中有不該存在的字符:某些內容可能只包括一部分字符,比如身份證號是數字+字母。最典型的就是頭、尾、中間的空格,也可能出現姓名中存在數字符號、身份證號中出現漢字等問題。這種情況下,需要以半自動校驗半人工方式來找出可能存在的問題,并去除不需要的字符。
1.2.2.3內容與該字段應有內容不符:一般數據獲取時會有前端校驗,但是也不乏這些問題會出現,此時需要我們再作處理,非重要字段可以去除掉,重要字段需要我們在做缺失值處理,處理方式就是上面提到的缺失值清洗。
1.2.3邏輯錯誤清洗:
1.2.3.1去重:建議把去重放在格式內容清洗之后,原因舉例:多個空格導致工具認為“吳亦凡”和“吳 亦凡”不是一個人,去重失敗。而且,并不是所有的重復都能這么簡單的去掉。
1.2.3.2去除不合理值:有人填表時候瞎填,年齡200歲,年收入100000萬(估計是沒看見”萬“字),這種的就要么刪掉,要么按缺失值處理。
1.2.3.3修正屬性依賴沖突:某些字段之間是可以相互驗證的,比如北京市和北京市的郵政編碼,你的身份證號和你的年齡,籍貫等這時候需要我們指定一個可靠的字段,然后去除或者重構不可靠的字段。比如:身份證號字段上顯示你是20歲,但是年齡字段上28歲,這是我們就以身份證上的信息為可靠字段,將年齡字段改為20歲。
1.2.4非需求數據清洗:
很簡單就是把不需要的字段刪除(勤備份)
1.2.5校驗:
1.2.5.1數據格式校驗:驗證數據格式是不是都符合標準化格式。
1.2.5.2關聯性校驗:有時我們的數據來源可能有多個渠道,如果多個渠道獲取的同一信息出現不一致的情況,需要我們重新判斷調整數據值,或者去除數據。
?
數據清洗過程中出現了很多判斷問題,一條數據是不是合乎標準,是否存在錯誤,我們可以通過相應算法去實現。關于數據清洗的大致介紹到這,數據清洗完成過后,就進入了數據轉換過程。
?
2. ETL之數據轉化
數據轉換的任務主要是進行不一致的數據轉換、數據粒度的轉換和一些商務規則的計算。將抽取出的數據進行過濾、合并、解碼、翻譯等轉換,為數據倉庫創建有效數據的過程。一旦數據抽取或選取過程完成,就要設計并確定轉換規則(Business Rules)應用于已抽取出的數據。轉換過程需要理解業務側重點(Business Focus)、信息需求(Informational Needs)和目前可用的源數據(Available Sources)。
?
2.1數據類型轉換:
2.1.1 增加“上下文”數據 如,時間戳??。
2.1.2 解碼(Decoding):如,將數值型的地域編碼替換成地域名稱
2.1.3 清潔和凈化:保留字段具有特定值或特定范圍的記錄、引用完整性檢查
?
2.2多數據源整合:
2.2.1 字段映射(Mapping):映射操作是將讀入的數據文件內容與預處理庫的字段進行對應及為預處理庫的字段指定數據類型的操作,在映射過程中可進行字段合并、復制、拆分、截取操作。
2.2.2 代碼變換(Transposing):—將不同數據源中的數據值規范成數據倉庫數據值。例如,將原系統非英文編碼轉換成數據倉庫英文編碼;將原系統信息編碼轉換成數據倉庫信息編碼等。
2.2.3 合并(Merging):—將兩個或更多個源系統記錄合并為一個輸出或“目標”記錄
2.2.4 派生(Derivations):—根據源數據,利用數學公式產生數據倉庫需要的數據。例如,由身份證號碼計算出出生日期、性別、年齡等。
2.3數據粒度的轉換:
業務系統一般存儲非常明細的數據,而數據倉庫中的數據是用來分析的,不需要非常明細的數據,一般情況下,會將業務系統數據按照數據倉庫粒度進行聚合。
2.4商務規則的計算:
不同的企業有不同的業務規則,不同的數據指標,這些指標有的時候不是簡單的加加減減就能完成,這個時候需要在ETL中將這些數據指標計算好了之后存儲在數據倉庫中,供分析使用。
3. ETL之數據加載
LOAD 加載經轉換和匯總的數據到目標數據倉庫中,可實現SQL或批量加載數據加載(Load) 經過數據轉換生成的文件的結構與數據倉庫數據表的結構完全一致,可以直接通過數據加載工具,以Bulk Load的方式加載到數據倉庫中。數據加載工作以oracle數據庫為例大致可以分為3步進行。
3.1 加載準備
在真正進行數據加載之前還可能需要完成以下準備工作。
3.1.1 刪除數據倉庫中數據表的索引,提高加載效率。主要是針對detail及fact大表,可以直接調用DBA所創建的索引維護腳本。DBA調試過數據倉庫后,必須更新相應的索引維護腳本,以保證ETL能夠正確刪除和建立索引。
3.2 加載
Load主要完成將轉換后文件的數據加載到數據倉庫的表中。需要用到的加載方式有三種
3.2.1 Insert:只需要將轉換后文件所有數據完全Insert到目標表中。
3.2.2 UpdAdd(Update Add):需要對目標表同時做Update及Insert操作,根據primary key,對于已有的記錄進行Update操作;對于不存在的記錄做Insert的操作;對于數據量大的表,由于此操作的效率非常低可以采用先將轉換后文件分割為Delet文件及Insert文件,然后先將Delete文件中的記錄根據 primay key對應從數據倉庫中刪除,然后再從Insert文件中將所有記錄全部Insert到目標表中。
3.3.3 Refresh:即將目標表的數據完全更新,一般的做法是先Truncate目標表的數據,然后再完全 Insert要加載的記錄。加載過程中數據倉庫關閉數據RI(Referential Integrity)管理功能,數據庫的RI檢查由ETL應用程序完成。
3.3 加載后
3.3.1 重新生成索引,在加載后階段刪除的索引需在此重建。該過程也是調用DBA維護的索引維護腳本。
3.3.2 文件清理:刪除不需要的臨時文件及臨時表。?
使用裝載工具或數據查詢語言(SQL)時注意點:效率問題、避免違反約束條件,注意裝載順序。
?
參考:ItStar公眾號
總結
 
                            
                        - 上一篇: 大学之道,在明明德
- 下一篇: 软件设计师知识体系归纳总结
