什么是數據倉庫?
數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用于支持管理決策。
核心特征
1. 面向主題
數據倉庫圍繞核心業務主題(如客戶、產品、銷售、財務)來組織數據,而不是圍繞具體的業務流程或應用系統。這與操作型數據庫 (如訂單處理系統)不同,后者是面向事務 的。
2. 集成
數據倉庫中的數據來源于多個分散的操作型系統(如ERP、CRM、日志文件等)。這些數據在進入數據倉庫之前,會經過清洗、轉換、整合,消除不一致性,形成統一的命名、編碼和格式。
3. 相對穩定
數據倉庫一旦存入數據,通常不會被修改或刪除,主要是進行數據的查詢和分析。這反映了讀多寫少的特性。操作型數據庫則需要頻繁地進行增刪改查。
4. 反映歷史變化
數據倉庫會長期保留歷史數據(例如5-10年),以便進行趨勢分析、預測未來。而操作型數據庫通常只保留當前或近期的數據。
核心架構與組成
1. 數據源
如:業務數據庫(MySQL, Oracle)、日志文件、API接口、外部數據等。
2. 數據抽取、轉換、加載
- 抽取 Extract:從數據源獲取數據。
- 轉換 Transform:清洗無效數據、轉換格式、統一標準、進行業務計算(這是最復雜的一步)。
- 加載 Load:將轉換后的數據加載到數據倉庫的目標表中。
3. 數據存儲與管理
- 這里存儲著細節數據、輕度匯總數據和高度匯總數據。
- 通常采用維度建模,構建星型模型或雪花模型,核心是事實表和維度表。
-
- 事實表:存儲業務過程的度量值(如銷售金額、銷售數量),主要是數值型數據。
-
- 維度表:存儲描述事實的業務上下文(如時間、地點、產品、客戶),主要是文本型數據。
4. 數據服務/應用層
工具包括:BI工具(如 Tableau, FineBI, Power BI)、即席查詢工具、報表系統等。
相關概念與技術
ETL vs. ELT
- ETL 抽取 -> 轉換 -> 加載:傳統方式,在加載到倉庫前進行轉換。適合結構化數據和對數據質量要求極高的場景。
- ELT 抽取 -> 加載 -> 轉換:現代方式,先加載到倉庫,然后利用倉庫的強大計算能力進行轉換。更適合處理海量、多結構的原始數據
OLTP vs. OLAP
- OLTP (Online Transactional Processing) 聯機事務處理:支持日常業務操作(增刪改查),是數據的生產者,是業務數據的源頭;代表系統 MySQL, PostgreSQL, Oracle
- OLAP (Online Analytical Processing) 聯機分析處理:支持復雜數據分析與決策;是數據的消費者,數據來自多個OLTP系統;Snowflake, BigQuery, Amazon Redshift, Apache Druid
數據集市
數據倉庫的一個子集,通常為某個特定部門或特定業務領域(如財務、銷售部)構建的微型數據倉庫。它從數據倉庫中獲取數據,規模更小、主題更聚焦、訪問更快。
現代數據棧:
- 新一代的數據平臺,通常基于云原生技術,組件更加解耦(增加獨立性,降低依賴關系)和專業化。
典型組成:Fivetran (Extract and Load) -> Snowflake/BigQuery (Storage/Compute) -> dbt (Transform) -> Tableau/Mode (BI)。