ETL面試題01
一、基礎概念與理論類
1. 請解釋什么是 ETL?它在數據處理流程中扮演什么角色?
答:ETL就是數據抽取、轉化、加載。目的是將分散的數據源集中在一起進行處理分析。
數據抽取:是指各種數據源中抽取數據,包括關系型數據庫(MySQL、Oracle等)、日志文件、Excel、非關系型數據庫、流失數據(kafka)等等,可以是全量抽取也可以是增量抽取。
數據轉化:是指將抽取到的數據進行清洗、格式轉化、數據整合、業務規則計算等等操作,使數據符合目標數據存儲的格式和業務需求,是最為復雜的步驟。
數據加載:將清洗轉化后的高質量數據加載到目標數據存儲中,例如數據倉庫(hive等)、數據湖,可以實現全量加載、增量加載、分區加載等,以供后續分析和應用。
ETL在數據處理流程中有重要作用:它將多個數據源進行整合統一,將數據進行轉化清洗,提升數據的質量,還能夠支持數據分析與業務決策,從數據中發現業務規律與問題,同時ETL工具也可以實現自動化數據流程,保證數據的時效性。
2. ETL 和 ELT 有什么區別?分別適用于哪些場景?
答:這兩者主要是操作步驟順序的不同。
ETL:先將數據轉化后再加載到目標數據存儲當中,轉換依賴ETL工具的計算能力,適合數據量較小的場景。
ELT:先將原數據加載到目標數據存儲后,再將數據進行轉換計算,可以利用目標存儲的分布式計算能力(Spark)進行轉換,更適合海量數據處理。
3. 什么是數據倉庫?它與數據庫的區別是什么?ETL 在數據倉庫中起到什么作用?
答:數據倉庫是一個面向主題的、集成的、非易失的、隨時間變化的數據集合,主要的作用是支持企業的決策分析。
數據倉庫的數據都是圍繞業務主題組織,它集成了多個數據源,例如數據庫、文件、日志等,通常數據一旦進入數據庫,是不會被頻繁修改的,主要是用來查詢分析而不是事務處理。數據會按照時間維度存儲歷史快照,支持趨勢分析。
4. 維度建模中的事實表和維度表有什么區別?各有哪些類型?
答:事實表是業務指標的載體,記錄發生了什么;維度表是業務的上下文信息,用來記錄人物時間地點、如何發生等。二者通過外鍵形成層關聯,形成“星型模型”或“雪花模型”,支撐靈活的多為分析。
事實表:存儲業務過程中可以量化的指標,如銷售額、訂單數,記載業務流水,數據特點是數據量大、更新頻繁。按照數據顆粒度和業務場景可以分為:事務事實表(最常見的訂單事務表)、周期快照表(記錄固定時間點的業務狀態,如每日庫存快照表)、累積快照事實表(從業務過程的開始到結束的全生命周期記錄)、無事實事務表(記錄事件的發生或關系的存在,如瀏覽記錄表)。
維度表:存儲描述性信息,如用戶、時間地點等,數據量少、更新頻率低。按結構和更新方式可分為:常規維度表(如商品維度表)、緩慢變化維度表(處理維度隨時間緩慢變化的場景有需要保留歷史狀態支持回溯,如商品分類調整表)、快速變化維度表(維度屬性頻繁變化,如:商品實時評分)、角色扮演維度表(同一維度在事實表中扮演多個角色,通過不同外鍵區分)、退化維度表(維度直接存儲在事實表中,不單獨創建維度表,通常是事務編號等無復雜描述的字段,例如訂單事實表中的訂單號)
5. 什么是緩慢變化維度(SCD)?常見的 SCD 類型有哪些,分別適用于什么場景?
答:緩慢變化維度就是可能會隨時間緩慢變化的維度,例如年齡、住址變更、商品分類變更等。常見的SCD類型主要是根據業務歷史數據進行設計的,主要是業務對于歷史數據的需求。
直接覆蓋型:不保留歷史數據,直接覆蓋新值,實現簡單節省空間。例如數據錯誤修正,無需保留錯誤值。
新增版本型:屬性變化時,舊記錄保存,新增一條記錄值,通過版本號或者時間戳記錄有效性。完整保留歷史版本,支持任意時間點的回溯。適用于歷史狀態有分析價值和需追蹤屬性的全生命周期的場景。
有限歷史型:在維度表中新增字段存儲最近的一次歷史值,進保留有限的歷史版本,實現簡單,歷史記錄有限,適合只需要比對“當前狀態與上一狀態”的場景,例如商品單價調整,當前單價與上一單價。
歷史表分離型:用兩個表存儲維度數據,主表存儲最新數據,歷史表存儲所有的歷史變更,記錄時間戳。特點是當前數據查詢高效,合適高頻查詢當下與低頻查詢歷史的場景。
混合型:場景復雜,綜合上述類型的特點。
6. 數據清洗的主要目的是什么?常見的數據質量問題有哪些,如何處理?
答:數據清洗的目的是消除原數據中的錯誤、不一致或無用信息,得到高質量、可靠的數據,包括確保數據的準確性、完整性、一致性(格式/邏輯一致)和有效性(符合業務規則),消除冗余或重復數據,減少存儲和計算資源,更貼合業務場景。
常見的數據質量問題:
- 數據缺失:例如字段為空,可能是數據采集遺漏或系統故障等。可以通過填充、刪除、標記等方式,填充可以采用均值、中位數或者眾數填充,也可以通過時間序列用前后值插值的方式或者用業務邏輯推導,需要根據實際業務進行判斷調整。若是比例較大且無用的字段可以直接刪除或者標記“未知”、”N/A“,保留原始狀態。
- 數據重復:存在完全相同或核心信息重復的記錄,會導致分析結果偏差。可以通過唯一標識或者組合標識進行去重,或者通過邏輯進行重復記錄合并(記錄的字段存在差異)
- 數據錯誤(值不符合實際):字段值不符合業務邏輯或常識。可以通過業務規則進行校驗修正,聯系數據源,對于極端值先確認是否為真實業務數據,若有誤可以標記或刪除,格式問題可以直接調整格式。
- 數據不一致:同一實體的信息在不同的數據源中存在矛盾,可能由于數據源不同步、業務規則不同意、字段定義模糊導致。可以采用統一格式、邏輯校驗、主數據管理等方式確保數據同一。
- 數據冗余:存在不必要的重復字段或無關信息,可以選擇直接刪除冗余字段,同時規范化存儲。
- 數據無效:數據不符合業務場景的有效性,例如“已取消的訂單”卻有“發貨時間”。直接過濾無效記錄,通過業務流程校驗,修正邏輯錯誤。
7. 什么是數據血緣?它在 ETL 過程中的作用是什么?
答:數據血緣就是描述數據從源頭產生到最終消費的全生命周期的流轉路徑以及各環節之間的依賴關系的記錄,類似于”家譜“,展示數據從哪里來(源系統、原始表),經過了那些處理(ETL轉換、計算邏輯、過濾規則)、最終到哪里(目標表、報表等)
數據血緣是數據從分散數據到目標存儲的核心流轉過程,可以幫助我們進行問題排查與故障定位,因為ETL涉及到多核環節的流轉,若是最終數據存在異常可以通過數據血緣快速追溯;保障數據質量和合規性;分析步驟變更影響,例如中間某一個環節需要調整,可以快速判斷出下游那些表也會受到影響以及可能存在的風險;便于數據資產管理和跨團隊協作,快速對齊數據定義。
二、工具與技術類
1. 你常用的 ETL 工具有哪些(如 DataStage、Informatica、Kettle、Talend 等)?請介紹一下它們的特點和使用場景。
答:常用的是Kettle工具。主要是因為Kettle開源免費,成本低,而且功能強大,支持多種數據源(數據庫、文件、API、Hadoop等),