本文的內(nèi)容來(lái)自數(shù)據(jù)之路
閱讀并記錄一些知識(shí)點(diǎn)和流程
摘取博客上的ETL流程,也是數(shù)據(jù)治理的一部分
1.元數(shù)據(jù)
元數(shù)據(jù)的質(zhì)量直接影響到數(shù)據(jù)管理的準(zhǔn)確性,如何把元數(shù)據(jù)建設(shè)好將起到至關(guān)重要的作用。元數(shù)據(jù)建設(shè)的目標(biāo)是打通數(shù)據(jù)接入到加工,再到數(shù)據(jù)消費(fèi)整個(gè)鏈路,規(guī)范元數(shù)據(jù)體系與模型,提供統(tǒng)一的元數(shù)據(jù)服務(wù)出口,保障元數(shù)據(jù)產(chǎn)出的穩(wěn)定性和質(zhì)量。
Data Profile標(biāo)簽體系
基礎(chǔ)標(biāo)簽:針對(duì)數(shù)據(jù)的存儲(chǔ)情況、訪問情況、安全等級(jí)等進(jìn)行打標(biāo)
數(shù)倉(cāng)標(biāo)簽:針對(duì)數(shù)據(jù)是增量還是全量、是否可再生、數(shù)據(jù)的生命周期來(lái)進(jìn)行標(biāo)簽化處理
業(yè)務(wù)標(biāo)簽:根據(jù)數(shù)據(jù)歸屬的主題域、產(chǎn)品線、業(yè)務(wù)類型為數(shù)據(jù)打上不同的標(biāo)簽
-
潛在標(biāo)簽:這類標(biāo)簽主要是為了說(shuō)明數(shù)據(jù)潛在的應(yīng)用場(chǎng)景,比如社交、媒體、廣告、電商、金融等
Data Profile標(biāo)簽體系
其實(shí)就是表與表關(guān)聯(lián)的可理解化(可視化),表現(xiàn)表的重要性,關(guān)聯(lián),類型,價(jià)值,結(jié)構(gòu)等,支持?jǐn)?shù)分與etl
2.計(jì)算管理
Map傾斜的解決方案
- 對(duì)上游小文件進(jìn)行合并,防止傾斜
- 對(duì)數(shù)據(jù)進(jìn)行打散,防止map端集合的數(shù)據(jù)傾斜
Join傾斜的解決方案
- mapjoin
Join傾斜時(shí),如果某路輸入比較小,則可以采用MapJoin避免傾斜。MapJoin的原理是將Join操作提前到Map端執(zhí)行,將小表讀入內(nèi)存,順序掃描大表完成Join,這樣可以避免因?yàn)榉职l(fā)key不均勻?qū)е聰?shù)據(jù)傾斜。但是MapJoin的使用有限制,必須是Join中的從表比較小才可用。所謂從表,即左外連接中的右表,或者右外連接中的左表。 - 空值長(zhǎng)尾
數(shù)據(jù)表中經(jīng)常出現(xiàn)空值的數(shù)據(jù),如果關(guān)聯(lián)key為空值且數(shù)據(jù),量比較大, Join時(shí)就會(huì)因?yàn)榭罩档木奂瘜?dǎo)致長(zhǎng)尾,針對(duì)這種情況可以將空值處理成隨機(jī)值。因?yàn)榭罩禑o(wú)法關(guān)聯(lián)上,只是分發(fā)到一處,因此處理成隨機(jī)值既不會(huì)影響關(guān)聯(lián)結(jié)果,也能很好地避免聚焦導(dǎo)致長(zhǎng)尾 - 熱點(diǎn)值
如果是因?yàn)闊狳c(diǎn)值導(dǎo)致的長(zhǎng)尾,并且Join的輸入比較大無(wú)法使用MapJoin,則可以先將熱點(diǎn)key取出,對(duì)于主表數(shù)據(jù)用熱點(diǎn)key切分成熱點(diǎn)數(shù)據(jù)和非熱點(diǎn)數(shù)據(jù)兩部分分別處理,最后合并
Reduce傾斜的解決方案
- 對(duì)熱點(diǎn)值單獨(dú)處理,例如union all
- 分區(qū)過多,插入的時(shí)候?qū)е滦∥募^多,設(shè)置插入時(shí)合并
- 對(duì)去重的處理(distinct) ,使用disticnt函數(shù),所有的數(shù)據(jù)只會(huì)shuffle到一個(gè)reducer上,導(dǎo)致reducer數(shù)據(jù)傾斜嚴(yán)重
目前Reduce端數(shù)據(jù)傾斜很多是由Count Distinct問題引起的,因此,在ETL開發(fā)工作中應(yīng)該予以重視Count Distinct問題,避免數(shù)據(jù)膨脹。對(duì)于一些表的Join階段的Null值問題,應(yīng)該對(duì)表的數(shù)據(jù)分布要有清楚的認(rèn)識(shí),在開發(fā)時(shí)解決這個(gè)問題
3.存儲(chǔ)和成本管理
數(shù)據(jù)壓縮
數(shù)據(jù)重分布:避免數(shù)據(jù)熱點(diǎn),提高壓縮效率
存儲(chǔ)治理
數(shù)據(jù)生命周期管理矩陣
4.數(shù)據(jù)質(zhì)量
數(shù)據(jù)質(zhì)量保障原則
- 完整性是指數(shù)據(jù)的記錄和信息是否完整,是否存在缺失的情況。數(shù)據(jù)的缺失主要包括記錄的缺失和記錄中某個(gè)字段信息的缺失,兩者都會(huì)造成統(tǒng)計(jì)結(jié)果不準(zhǔn)確,所以說(shuō)完整性是數(shù)據(jù)質(zhì)量最基礎(chǔ)的保障
- 準(zhǔn)確性是指數(shù)據(jù)中記錄的信息和數(shù)據(jù)是否準(zhǔn)確,是否存在異常或者錯(cuò)誤的信息。
- 一致性一般體現(xiàn)在跨度很大的數(shù)據(jù)倉(cāng)庫(kù)體系中,主數(shù)據(jù)倉(cāng)庫(kù)內(nèi)部有很多業(yè)務(wù)數(shù)據(jù)倉(cāng)庫(kù)分支,對(duì)于同一份數(shù)據(jù),必須保證一致性。
- 及時(shí)性
學(xué)習(xí)一下元數(shù)據(jù)清標(biāo)簽體系
注意join中對(duì)null的處理
reduce端去重的處理
最后一章數(shù)據(jù)應(yīng)用提供了數(shù)據(jù)視野關(guān)于對(duì)數(shù)據(jù)的應(yīng)用,生產(chǎn)眾多的數(shù)據(jù)產(chǎn)品.基于平臺(tái)的數(shù)據(jù)應(yīng)用架構(gòu)是令人震撼的.這樣的架構(gòu)是如何搭建與聯(lián)系起來(lái)的及如何正常運(yùn)行產(chǎn)出價(jià)值的
5.ETL概述
1.什么是邏輯數(shù)據(jù)映射?它對(duì)ETL項(xiàng)目組的作用是什么?
邏輯數(shù)據(jù)映射(Logical Data Map)用來(lái)描述源系統(tǒng)的數(shù)據(jù)定義、目標(biāo)數(shù)據(jù)倉(cāng)庫(kù)的模型以及將源系統(tǒng)的數(shù)據(jù)轉(zhuǎn)換到數(shù)據(jù)倉(cāng)庫(kù)中需要做操作和處理方式的說(shuō)明文檔,通常以表格或Excel的格式保存
- 目標(biāo)表名:
- 目標(biāo)列名:
- 目標(biāo)表類型:注明是事實(shí)表、維度表或支架維度表。
- SCD類型:對(duì)于維度表而言。
- 源數(shù)據(jù)庫(kù)名:源數(shù)據(jù)庫(kù)的實(shí)例名,或者連接字符串。
- 源表名:
- 源列名:
- 轉(zhuǎn)換方法:需要對(duì)源數(shù)據(jù)做的操作,如Sum(amount)等
邏輯數(shù)據(jù)映射應(yīng)該貫穿數(shù)據(jù)遷移項(xiàng)目的始終,在其中說(shuō)明了數(shù)據(jù)遷移中的ETL策略。在進(jìn)行物理數(shù)據(jù)映射前進(jìn)行邏輯數(shù)據(jù)映射對(duì)ETL項(xiàng)目組是重要的,它起著元數(shù)據(jù)的作用。項(xiàng)目中最好選擇能生成邏輯數(shù)據(jù)映射的數(shù)據(jù)遷移工具
2.在數(shù)據(jù)倉(cāng)庫(kù)項(xiàng)目中,數(shù)據(jù)探索階段的主要目的是什么?
在邏輯數(shù)據(jù)映射進(jìn)行之前,需要首先對(duì)所有的源系統(tǒng)進(jìn)行分析。對(duì)源系統(tǒng)的分析通常包括兩個(gè)階段,一個(gè)是數(shù)據(jù)探索階段(Data Discovery Phase),另一個(gè)是異常數(shù)據(jù)檢測(cè)階段
數(shù)據(jù)探索階段包括以下內(nèi)容:
1.收集所有的源系統(tǒng)的文檔、數(shù)據(jù)字典等內(nèi)容。
2.收集源系統(tǒng)的使用情況,如誰(shuí)在用、每天多少人用、占多少存儲(chǔ)空間等內(nèi)容。
3.判斷出數(shù)據(jù)的起始來(lái)源(System-of-Record)。
4.通過數(shù)據(jù)概況(Data Profiling)來(lái)對(duì)源系統(tǒng)的數(shù)據(jù)關(guān)系進(jìn)行分析。
數(shù)據(jù)探索階段的主要目的是理解源系統(tǒng)的情況,為后續(xù)的數(shù)據(jù)建模和邏輯數(shù)據(jù)映射打下堅(jiān)實(shí)的基礎(chǔ)
3.如何確定起始來(lái)源數(shù)據(jù)?
這個(gè)問題的關(guān)鍵是理解什么是System-of-Record.System-of-Record和數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域內(nèi)的其他很多概念一樣,不同的人對(duì)它有不同的定義。在Kimball的體系中,System-of-Record是指最初產(chǎn)生數(shù)據(jù)的地方,即數(shù)據(jù)的起始來(lái)源。在較大的企業(yè)內(nèi),數(shù)據(jù)會(huì)被冗余的保存在不同的地方,在數(shù)據(jù)的遷移過程中,會(huì)出現(xiàn)修改、清洗等操作,導(dǎo)致與數(shù)據(jù)的起始來(lái)源產(chǎn)生不同
起始來(lái)源數(shù)據(jù)對(duì)數(shù)據(jù)倉(cāng)庫(kù)的建立有著非常重要的作用,尤其是對(duì)產(chǎn)生一致性維度來(lái)說(shuō)。我們從起始來(lái)源數(shù)據(jù)的越下游開始建立數(shù)據(jù)倉(cāng)庫(kù),我們遇到垃圾數(shù)據(jù)的風(fēng)險(xiǎn)就會(huì)越大。
4.在ETL過程中四個(gè)基本的過程分別是什么?
Kimball數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建方法中,ETL的過程和傳統(tǒng)的實(shí)現(xiàn)方法有一些不同,主要分為四個(gè)階段,分別是抽取(extract)、清洗(clean)、一致性處理(comform)和交付(delivery),簡(jiǎn)稱為ECCD。
抽取階段的主要任務(wù)是:
- 讀取源系統(tǒng)的數(shù)據(jù)模型。
- 連接并訪問源系統(tǒng)的數(shù)據(jù)。
- 變化數(shù)據(jù)捕獲。
- 抽取數(shù)據(jù)到數(shù)據(jù)準(zhǔn)備區(qū)。
清洗階段的主要任務(wù)是:
- 清洗并增補(bǔ)列的屬性。
- 清洗并增補(bǔ)數(shù)據(jù)結(jié)構(gòu)。
- 清洗并增補(bǔ)數(shù)據(jù)規(guī)則。
- 增補(bǔ)復(fù)雜的業(yè)務(wù)規(guī)則。
- 建立元數(shù)據(jù)庫(kù)描述數(shù)據(jù)質(zhì)量。
- 將清洗后的數(shù)據(jù)保存到數(shù)據(jù)準(zhǔn)備區(qū)。
一致性處理階段的主要任務(wù)是:
- 一致性處理業(yè)務(wù)標(biāo)簽,即維度表中的描述屬性。
- 一致性處理業(yè)務(wù)度量及性能指標(biāo),通常是事實(shí)表中的事實(shí)。
- 去除重復(fù)數(shù)據(jù)。
- 國(guó)際化處理。
- 將一致性處理后的數(shù)據(jù)保存到數(shù)據(jù)準(zhǔn)備區(qū)。
交付階段的主要任務(wù)是:
- 加載星型的和經(jīng)過雪花處理的維度表數(shù)據(jù)。
- 產(chǎn)生日期維度。
- 加載退化維度。
- 加載子維度。
- 加載1、2、3型的緩慢變化維度。
- 處理遲到的維度和遲到的事實(shí)。
- 加載多值維度。
- 加載有復(fù)雜層級(jí)結(jié)構(gòu)的維度。
- 加載文本事實(shí)到維度表。
- 處理事實(shí)表的代理鍵。
- 加載三個(gè)基本類型的事實(shí)表數(shù)據(jù)。
- 加載和更新聚集
- 將處理好的數(shù)據(jù)加載到數(shù)據(jù)倉(cāng)庫(kù)
5.簡(jiǎn)述異構(gòu)數(shù)據(jù)源中的數(shù)據(jù)抽取技術(shù)。
在數(shù)據(jù)倉(cāng)庫(kù)項(xiàng)目中,需要抽取的數(shù)據(jù)經(jīng)常來(lái)自不同的數(shù)據(jù)源,它們的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)都可能不同,即稱之為異構(gòu)數(shù)據(jù)源
在對(duì)異構(gòu)數(shù)據(jù)源進(jìn)行整合抽取時(shí),我們需要做的事情依次是標(biāo)識(shí)出所有的源系統(tǒng),對(duì)源系統(tǒng)進(jìn)行概況分析,定義數(shù)據(jù)匹配邏輯,建立篩選規(guī)則,生成一致性維度
對(duì)于源數(shù)據(jù)的操作系統(tǒng)平臺(tái)和數(shù)據(jù)平臺(tái)各不相同的情況,我們需要根據(jù)實(shí)際情況來(lái)確定如何進(jìn)行數(shù)據(jù)抽取,通常的方法有建立ODBC連接、定義接口文件、建立DBLINK等方法
6.從ERP源系統(tǒng)中抽取數(shù)據(jù)最好的方法是什么?
ERP系統(tǒng)的產(chǎn)生是為了解決企業(yè)內(nèi)異構(gòu)數(shù)據(jù)的整合。這個(gè)問題也是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)面臨的主要問題。ERP的解決方案是將企業(yè)內(nèi)的各個(gè)應(yīng)用(包括銷售、會(huì)計(jì)、人力資源、庫(kù)存和產(chǎn)品等)建立在相同的平臺(tái)和相同的應(yīng)用框架下,即在應(yīng)用操作層將企業(yè)內(nèi)的數(shù)據(jù)進(jìn)行了一致性處理。而數(shù)據(jù)倉(cāng)庫(kù)是在應(yīng)用操作層之上建立一致性的規(guī)則并進(jìn)行一致性處理。目前比較流行的ERP系統(tǒng)有SAP、PeopleSoft、Oracle、Baan和J.D.EDwards(大部分沒接觸過)
如果企業(yè)內(nèi)只有一套ERP系統(tǒng),那么數(shù)據(jù)就已經(jīng)是一致的了,為數(shù)據(jù)抽取提供了方便。如果企業(yè)內(nèi)除了ERP外還有其他系統(tǒng),則數(shù)據(jù)抽取會(huì)變得復(fù)雜。因?yàn)槟壳暗腅RP系統(tǒng)的數(shù)據(jù)模型都非常復(fù)雜,可能有幾百幾千個(gè)表,并且較難理解。直接在ERP系統(tǒng)上建立數(shù)據(jù)捕獲和抽取是非常復(fù)雜的。最好的辦法是購(gòu)買能針對(duì)ERP系統(tǒng)數(shù)據(jù)抽取提供功能的ETL工具,將ERP內(nèi)部的復(fù)雜性留給ETL廠商處理
7.簡(jiǎn)述出三種變化數(shù)據(jù)捕獲技術(shù)及其優(yōu)缺點(diǎn)?☆
1.采用審計(jì)列
審計(jì)列指表中如“添加日期”、“修改日期”、“修改人”等信息的字段。應(yīng)用程序在對(duì)該表的數(shù)據(jù)進(jìn)行操作時(shí),同時(shí)更新這些字段,或者建立觸發(fā)器來(lái)更新這些字段。采用這種方式進(jìn)行變化數(shù)據(jù)捕獲的優(yōu)點(diǎn)是方便,容易實(shí)現(xiàn)。缺點(diǎn)是如果操作型系統(tǒng)沒有相應(yīng)的審計(jì)字段,需要改變已有的操作型系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),以保證獲取過程涉及的每張表都有審計(jì)字段。
2.?dāng)?shù)據(jù)庫(kù)日志
DBMS日志獲取是一種通過DBMS提供的日志系統(tǒng)來(lái)獲得變化的數(shù)據(jù)。它的優(yōu)點(diǎn)是對(duì)數(shù)據(jù)庫(kù)或訪問數(shù)據(jù)庫(kù)的操作系統(tǒng)的影響最小。缺點(diǎn)是要求DBMS支持,并且對(duì)日志記錄的格式非常了解。
3.全表掃描
全表掃描或者全表導(dǎo)出文件后進(jìn)行掃描對(duì)比也可以進(jìn)行變化數(shù)據(jù)捕獲,尤其是捕獲刪除的數(shù)據(jù)時(shí)。這種方法的優(yōu)點(diǎn)是,思路清晰,適應(yīng)面廣,缺點(diǎn)是效率比較差。
8.簡(jiǎn)述應(yīng)該在ETL的哪個(gè)步驟來(lái)實(shí)現(xiàn)概況分析?
數(shù)據(jù)概況分析是對(duì)源數(shù)據(jù)內(nèi)容的概況進(jìn)行分析,應(yīng)該在項(xiàng)目的開始后盡早完成,它會(huì)對(duì)設(shè)計(jì)和實(shí)現(xiàn)有很大的影響。在完成需求收集后就應(yīng)該立即開始數(shù)據(jù)概況分析。
數(shù)據(jù)概況分析不光是對(duì)源系統(tǒng)的數(shù)據(jù)概況的定量描述,而且為ETL系統(tǒng)中需要建立的錯(cuò)誤事件事實(shí)表(Error Event Table)和審計(jì)維度表(Audit Dimension)打下基礎(chǔ),為其提供數(shù)據(jù)。
9.ETL項(xiàng)目中的數(shù)據(jù)質(zhì)量部分核心的交付物有那些?
1.?dāng)?shù)據(jù)概況分析結(jié)果
數(shù)據(jù)概況分析結(jié)果是對(duì)源系統(tǒng)的數(shù)據(jù)狀況的分析產(chǎn)物,包括如源系統(tǒng)中有多少個(gè)表,每個(gè)表有多少字段,其中多少為空,表間的外鍵關(guān)系是否存在等反映源系統(tǒng)數(shù)據(jù)質(zhì)量的內(nèi)容。這些內(nèi)容用來(lái)決定數(shù)據(jù)遷移的設(shè)計(jì)和實(shí)現(xiàn),并提供給錯(cuò)誤事件事實(shí)表和審計(jì)維度表需要的相關(guān)數(shù)據(jù)。
2.錯(cuò)誤事件事實(shí)表
錯(cuò)誤事件事實(shí)表及相關(guān)的一系列維度表是數(shù)據(jù)質(zhì)量檢查部分的一個(gè)主要交付物。粒度是每一次數(shù)據(jù)質(zhì)量檢查中的錯(cuò)誤信息。相關(guān)維度包括日期維度表、遷移信息維度表、錯(cuò)誤事件信息維度表,其中錯(cuò)誤事件信息維度表中檢查的類型、源系統(tǒng)的信息、涉及的表信息、檢查使用的SQL等內(nèi)容。錯(cuò)誤事件事實(shí)表不提供給前臺(tái)用戶。
3.審計(jì)維度表
審計(jì)維度表是給最終用戶提供數(shù)據(jù)質(zhì)量說(shuō)明的一個(gè)維度表。它描述了用戶使用的事實(shí)表的數(shù)據(jù)來(lái)源,數(shù)據(jù)質(zhì)量情況等內(nèi)容。
10.簡(jiǎn)述對(duì)一致性維度的三種基本的交付步驟。
數(shù)據(jù)整合的關(guān)鍵就是生成一致性維度,再通過一致性維度將來(lái)自不同數(shù)據(jù)源的事實(shí)數(shù)據(jù)合并到一起,供分析使用。通常來(lái)說(shuō),生成一致性維度有如下三個(gè)步驟:
1.標(biāo)準(zhǔn)化(Standardizing)
標(biāo)準(zhǔn)化的目的是使不同數(shù)據(jù)源的數(shù)據(jù)編碼方式,數(shù)據(jù)格式等相同,為下一步數(shù)據(jù)匹配打下基礎(chǔ)。
2.匹配(Matching and Deduplication)
數(shù)據(jù)匹配的工作有兩種,一種是將不同數(shù)據(jù)源的標(biāo)識(shí)同一事物的不同屬性匹配到一起,是數(shù)據(jù)更完善;另一種是將不同數(shù)據(jù)源的相同數(shù)據(jù)標(biāo)識(shí)成重復(fù),為下一步的篩選打下基礎(chǔ)。
3.篩選(Surviving)
數(shù)據(jù)篩選的主要目的是選定一致性維度作為主數(shù)據(jù)(Master Data),也就是最終交付的一致性維度數(shù)據(jù)。
11.簡(jiǎn)述三種基本事實(shí)表,并說(shuō)明ETL的過程中如何處理它們☆
事實(shí)表從粒度的角色來(lái)劃分可以分為三類,分別是交易粒度事實(shí)表(Transaction Grain)、周期快照粒度事實(shí)表(Periodic Snapshot)和累計(jì)快照粒度事實(shí)表(Accumulating Snapshot)。在事實(shí)表的設(shè)計(jì)時(shí),一定要注意一個(gè)事實(shí)表只能有一個(gè)粒度,不能將不同粒度的事實(shí)建立在同一張事實(shí)表中。
交易粒度事實(shí)表的來(lái)源伴隨交易事件成生的數(shù)據(jù),例如銷售單。在ETL過程中,以原子粒度直接進(jìn)行遷移。
周期快照事實(shí)表是用來(lái)記錄有規(guī)律的,固定時(shí)間間隔的業(yè)務(wù)累計(jì)數(shù)據(jù),例如庫(kù)存日快照。在ETL過程中,以固定的時(shí)間間隔生成累計(jì)數(shù)據(jù)。
累積快照事實(shí)表用來(lái)記錄具有時(shí)間跨度的業(yè)務(wù)處理過程的整個(gè)過程的信息。在ETL過程中,隨著業(yè)務(wù)處理過程的步驟逐步完善該表中的記錄。
12.遲到的數(shù)據(jù)對(duì)事實(shí)表和維度表有什么影響?怎樣來(lái)處理這個(gè)問題?
對(duì)于遲到的事實(shí)記錄,我們可以插入到相應(yīng)的事實(shí)表中。在插入的同時(shí),還需要做一些處理。首先,對(duì)于具有SCD TYPE 2型維度的事實(shí)記錄需要在插入前判斷該事實(shí)記錄的發(fā)生日期到目前為止,維度記錄是否發(fā)生過變化,如果有變化,該事實(shí)記錄需要對(duì)應(yīng)到事實(shí)發(fā)生時(shí)的維度記錄上。其次,在事實(shí)記錄插入完成后,與該事實(shí)表相關(guān)的聚集事實(shí)表和合并事實(shí)表需要做相應(yīng)的處理。
對(duì)于遲到的維度記錄,我們需要做的處理要復(fù)雜一些。首先,如果遲到的維度記錄是第一次進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)中,那么需要在維度表中生成一條維度記錄,并將與該維度記錄對(duì)應(yīng)的事實(shí)記錄的外鍵進(jìn)行更新。其次,如果遲到的維度記錄是對(duì)原維度進(jìn)行的修改,那么我們?cè)诰S度表中生成一條新記錄的同時(shí),還需要找到維度本次變化到下次變化間的事實(shí)行,并將其維度外鍵更新為新加維度的代理關(guān)鍵字
13.如果ETL進(jìn)程運(yùn)行較慢,需要分哪幾步去找到ETL系統(tǒng)的瓶頸問題。
ETL系統(tǒng)遇到性能問題,運(yùn)行很慢是一件較常見的事情,這時(shí)要做的是逐步找到系統(tǒng)的瓶頸在哪里
首先要確定是由CPU、內(nèi)存、I/O和網(wǎng)絡(luò)等產(chǎn)生的瓶頸,還是由ETL處理過程產(chǎn)生的瓶頸
如果環(huán)境沒有瓶頸,那么需要分析ETL的代碼。這時(shí),我們可以采用排除的方法,需要隔離不同的操作,并分別對(duì)它們進(jìn)行測(cè)試。如果是采用純手工編碼方式的ETL處理,隔離不同的操作要麻煩一些,這時(shí)需要根據(jù)編碼的實(shí)際情況來(lái)處理。如果是采用ETL工具的話,目前的ETL工具應(yīng)該都有隔離不同處理的功能,隔離起來(lái)相對(duì)容易一些
分析最好從抽取操作開始,然后依次分析各種計(jì)算、查找表、聚集、過濾等轉(zhuǎn)換環(huán)節(jié)的處理操作,最后分析加載操作
實(shí)際的處理中,可以按照下面的七個(gè)步驟來(lái)查找瓶頸:
1.隔離并執(zhí)行抽取查詢語(yǔ)句。
先將抽取部分隔離出來(lái),去掉轉(zhuǎn)換和交付,可以將數(shù)據(jù)直接抽取到文件中。如果這一步效率很差,基本確定是抽取SQL的問題。從經(jīng)驗(yàn)來(lái)看,未經(jīng)調(diào)優(yōu)的SQL是一個(gè)最常見的導(dǎo)致ETL效率差的原因。如果這步?jīng)]有問題進(jìn)入第二步。
2.去掉過濾條件。
這一條是針對(duì)全抽取,然后在ETL處理中進(jìn)行過濾的處理方式而言。在ETL處理中做過濾處理有時(shí)會(huì)產(chǎn)生瓶頸。可以先將過濾去掉,如果確定為這個(gè)原因,可以考慮在抽取時(shí)進(jìn)行數(shù)據(jù)過濾。
3.排除查找表的問題。
參照數(shù)據(jù)在ETL處理過程中通常會(huì)加載到內(nèi)存中,目的是做代碼和名稱的查找替換,也稱查找表。有時(shí)查找表的數(shù)據(jù)量過大也會(huì)產(chǎn)生瓶頸。可以逐個(gè)隔離查找表,來(lái)確定是否是這里出現(xiàn)問題。注意要將查找表的數(shù)據(jù)量降到最低,通常一個(gè)自然鍵一個(gè)代理鍵就可以,這樣可以減少不必要的數(shù)據(jù)I/O。
4.分析排序和聚集操作。
排序和聚集操作都是非常費(fèi)資源的操作。對(duì)這部分隔離,來(lái)判斷是否因?yàn)樗鼈円鹦阅軉栴}。如果確定是因?yàn)檫@個(gè),需要考慮是否可以將排序和聚集處理移出數(shù)據(jù)庫(kù)和ETL工具,移到操作系統(tǒng)中來(lái)處理。
5.隔離并分析每一個(gè)計(jì)算和轉(zhuǎn)換處理。
有時(shí)轉(zhuǎn)換過程中的處理操作也會(huì)引起ETL工作的性能。逐步隔離移除它們來(lái)判斷哪里出了問題。要注意觀察像默認(rèn)值、數(shù)據(jù)類型轉(zhuǎn)換等操作。
6.隔離更新策略。
更新操作在數(shù)據(jù)量非常大時(shí)是性能非常差的。隔離這部分,看看是否這里出了問題。如果確定是因?yàn)榇笈扛鲁隽诵阅軉栴}。應(yīng)該考慮將insert、update和delete分開處理。
7.檢測(cè)加載數(shù)據(jù)的數(shù)據(jù)庫(kù)I/O。
如果前面各部分都沒有問題,最后需要檢測(cè)是目標(biāo)數(shù)據(jù)庫(kù)的性能問題。可以找個(gè)文件代替數(shù)據(jù)庫(kù),如果性能提高很多,需要仔細(xì)檢測(cè)目標(biāo)數(shù)據(jù)庫(kù)的加載過程中的操作。例如是否關(guān)閉了所有的約束,關(guān)閉了所有的索引,是否使用了批量加載工具。如果性能還沒有提高,可以考慮使用并行加載策略。
重點(diǎn)
簡(jiǎn)述出三種變化數(shù)據(jù)捕獲技術(shù)及其優(yōu)缺點(diǎn)?
在ETL過程中四個(gè)基本的過程分別是什么?
ETL項(xiàng)目中的數(shù)據(jù)質(zhì)量部分核心的交付物有那些?
簡(jiǎn)述三種基本事實(shí)表,并說(shuō)明ETL的過程中如何處理它們
遲到的數(shù)據(jù)對(duì)事實(shí)表和維度表有什么影響?怎樣來(lái)處理這個(gè)問題?
如果ETL進(jìn)程運(yùn)行較慢,需要分哪幾步去找到ETL系統(tǒng)的瓶頸問題。
還有上一篇提出的重點(diǎn):如何有效關(guān)聯(lián)維度表和事實(shí)表,在etl中如何對(duì)原始數(shù)據(jù)進(jìn)行數(shù)據(jù)域的劃分,維表或者事實(shí)表的劃分