返回目錄
A
洞見數據:AI 驅動的全流程商業數據分析 - 第 2 章
第2章 數據採集與存取
發布於 2026-02-26 12:50
# 第2章 數據採集與存取
> **核心觀點**:資料來源決定了後續分析的深度與廣度,合理規劃採集與存取流程能為整個數據科學項目奠定堅實基礎。
## 2.1 資料來源分類
在實務上,資料來源可大致分為三類:
1. **結構化資料**
* 典型形式:關係型資料庫、CSV/TSV、Excel。
* 優點:易於驗證、符合模式、查詢高效。
* 典型案例:交易系統(Salesforce、SAP)、金融風險評估(交易日誌)。
2. **非結構化資料**
* 典型形式:文字文件、PDF、影像、音訊、影片、社群媒體貼文。
* 優點:豐富語義,能提供深度洞察。
* 典型案例:客戶服務聊天紀錄、產品使用者評論、網路攝影機錄像。
3. **即時/流資料**
* 典型形式:Kafka、Kinesis、Pub/Sub、WebSocket。
* 優點:支持實時監控、預警與動態決策。
* 典型案例:金融市場行情、IoT 感測器、網站點擊流。
### 資料來源選型指標
| 指標 | 重要性 | 評估要點 |
|------|--------|----------|
| **資料量** | ★★★ | 需要的存儲容量與計算資源。
| **更新頻率** | ★★ | 是否需要批處理或即時處理。
| **結構化程度** | ★★★ | 是否可直接映射至資料模型。
| **成本** | ★★ | 取得、傳輸與存儲成本。
| **合規風險** | ★★ | 個人資料、版權、機密性。
> **實務建議**:在規劃專案初期,先以「資料源清單」完成可視化圖,標示每個來源的類別、頻率與存取方式,避免後續出現資料孤島或重複抓取。
## 2.2 ETL 與 ELT
> **ETL**:Extract ➜ Transform ➜ Load(提取 → 轉換 → 載入)。
> **ELT**:Extract ➜ Load ➜ Transform(提取 → 載入 → 轉換)。
### 2.2.1 ETL
- **優點**:
* 在將資料載入目標系統前即完成清洗與轉換,確保載入後資料一致。
* 適用於傳統資料倉儲(RDBMS)與較舊的 BI 工具。
- **缺點**:
* 轉換步驟耗費時間,對即時性要求高的場景不友善。
- **典型工具**:Informatica PowerCenter、Talend、IBM DataStage。
### 2.2.2 ELT
- **優點**:
* 利用現代資料庫(如 Snowflake、BigQuery、Azure Synapse)內建的高效計算引擎進行轉換,減少 ETL 伺服器壓力。
* 支持大規模即時資料處理與資料湖(Data Lake)架構。
- **缺點**:
* 需要目標系統具備足夠的計算與儲存能力。
- **典型工具**:dbt、Apache Spark、Snowflake Snowpipe。
### 2.2.3 何時選擇 ETL vs ELT
| 场景 | 建議流程 |
|------|----------|
| **批處理、歷史資料聚合** | ETL(事先轉換,保持資料品質) |
| **大數據、即時資料** | ELT(先載入,後利用分布式引擎轉換) |
| **合規要求高、需要資料治理** | ETL(轉換時即加入治理規則) |
| **資料湖佈署** | ELT(將原始資料載入湖中,隨需轉換) |
## 2.3 數據湖與資料倉儲
### 2.3.1 數據湖(Data Lake)
- **定義**:將原始資料以其原生格式(如 Parquet、JSON、Avro)直接存入分佈式檔案系統(HDFS、S3、Azure Data Lake Storage)。
- **特點**:
* **Schema‑On‑Read**:讀取時再定義結構,適合探索性分析。
* **低成本**:存儲成本低,支援大規模數據。
* **靈活性**:可同時存放結構化、半結構化與非結構化資料。
- **典型應用**:機器學習訓練資料集、原始日誌、物聯網感測資料。
### 2.3.2 資料倉儲(Data Warehouse)
- **定義**:為商業分析而設計的資料庫,通常採用 **Schema‑On‑Write**,在載入前就定義好資料模式。
- **特點**:
* **OLAP**:適合複雜查詢、報表與分析。
* **高一致性**:資料經過清洗、校驗,確保品質。
* **性能優化**:使用星型、雪花型模式、分區與聚簇索引。
- **典型應用**:BI 報表、營收報表、客戶分析。
### 2.3.3 結合使用策略
1. **先在數據湖收集原始資料**,保持資料完整與彈性。
2. **使用 ETL/ELT 將經過治理的資料抽取、轉換後載入資料倉儲**,供 BI 與決策使用。
3. **將資料湖與資料倉儲透過元資料管理層(Data Catalog)整合**,確保資料的可追溯性。
## 2.4 典型工作流程示範
以下示範一個從資料來源到資料倉儲的完整流程,使用 Apache Airflow 進行排程與監控。
python
# airflow-dag.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator
from airflow.operators.bash import BashOperator
default_args = {
'owner': 'data_team',
'depends_on_past': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG(
'ingest_and_transform',
default_args=default_args,
schedule_interval='@daily',
start_date=datetime(2024, 1, 1),
catchup=False,
)
# 1. 抓取結構化資料
extract_sql = BashOperator(
task_id='extract_sql',
bash_command='pg_dump -U user -h host db > /data_lake/raw/transactions/transactions_{{ ds }}.sql',
dag=dag,
)
# 2. 載入數據湖(ELT)
load_to_lake = SparkSubmitOperator(
task_id='load_to_lake',
conn_id='spark_local',
application='/spark/convert_to_parquet.py',
dag=dag,
)
# 3. 轉換並載入資料倉儲(ETL)
transform_and_load = dbt.DbtRunOperator(
task_id='dbt_transform',
dir='/dbt_project',
dag=dag,
)
extract_sql >> load_to_lake >> transform_and_load
> **重點**:在 DAG 中使用**回滾機制**與**告警**,確保任何一個步驟失敗時都能即時通知資料團隊,避免「資料缺口」影響商業決策。
## 2.5 實務小貼士
| 實務點 | 說明 |
|--------|------|
| **資料品質先行檢核** | 在 ETL/ELT 前先用 **Data Quality Rules**(缺失值、重複、異常)驗證。
| **元資料管理** | 建立 Data Catalog(如 Amundsen、DataHub),並自動掃描資料湖與倉儲。
| **安全性分層** | 使用 IAM、存取權限、加密(SSE‑S3、AES‑256)來保護敏感資料。
| **彈性伸縮** | 在雲環境下採用 **Spot Instances** 或 **Auto‑Scaling** 以降低成本。
| **成本追蹤** | 定期審查存儲使用量與處理成本,對比專案 KPI,確保投資回報。
## 小結
- **資料來源分類** 為採集策略決策提供指引。
- **ETL 與 ELT** 兩種資料搬移模式各有適用場景,需根據資料量、更新頻率與合規性選擇。
- **數據湖** 與 **資料倉儲** 可結合使用,保證資料完整性與分析性能。
- **排程與監控**(如 Airflow)是確保流程可靠運作的關鍵。
> **下一步**:在第3章中,我們將深入探討資料治理與元資料管理,確保這些採集與存取流程產生的資料能在整個組織內被有效利用。
---
> **延伸閱讀**:
> - 《設計資料湖與資料倉儲》
> - 《Data Engineering Handbook》