3. 数据源探索与采集:常见数据源类型及采集策略
数据源是样本构建的起点。不同类型的数据源在访问方式、数据格式、实时性、数据量级上差异显著。本章系统梳理数据库、API、日志、文件四大类数据源的核心特征与采集策略,帮助你在实际项目中快速定位并高效获取原始数据。
3.1 常见数据源类型对比
下表从访问方式、数据结构、典型场景、采集难点四个维度对四类数据源进行横向对比:
| 数据源类型 | 访问方式 | 数据结构 | 典型场景 | 采集难点 |
|---|---|---|---|---|
| 数据库 | JDBC/ODBC 直连 | 结构化(表、视图) | 业务系统、交易记录 | 权限控制、大表全量扫描 |
| API | HTTP/HTTPS 请求 | 半结构化(JSON/XML) | 第三方服务、微服务 | 限流、鉴权、分页 |
| 日志 | 文件流/消息队列 | 半结构化/非结构化 | 服务器日志、用户行为 | 高吞吐、格式不统一 |
| 文件 | 文件系统/SFTP | 结构化/非结构化 | CSV/Excel/图片/文本 | 编码、格式解析、版本管理 |
选型建议: 优先选择数据库直连获取结构化数据;若数据量极大且实时性要求高,考虑日志流式采集;API 适合低频、小批量、跨系统的数据交换;文件采集常用于离线批量和非结构化数据场景。
3.2 数据库数据源与采集策略
数据库是最常见的数据源,通常存储业务核心数据。采集时需关注以下要点:
- 连接方式: 使用 JDBC/ODBC 驱动直连,支持 MySQL、PostgreSQL、Oracle、SQL Server 等主流数据库。
- 增量采集: 通过时间戳字段(如
update_time)或自增 ID 实现增量拉取,避免全表重复扫描。 - 分页与限流: 大表使用
LIMIT/OFFSET或游标分页,控制单次查询数据量,防止数据库负载过高。 - 连接池管理: 使用连接池(如 HikariCP、Druid)复用连接,避免频繁创建/销毁。
-- 增量采集示例:基于时间戳
SELECT * FROM orders
WHERE update_time > '2025-03-01 00:00:00'
ORDER BY update_time ASC
LIMIT 1000;
3.3 API 数据源与采集策略
API 是微服务架构和第三方数据接入的主要方式。采集时需处理鉴权、限流、分页、重试等常见问题。
- 鉴权方式: API Key、OAuth 2.0、JWT Token,需在请求头中携带。
- 限流处理: 遵守 API 的 Rate Limit,使用指数退避(Exponential Backoff)策略进行重试。
- 分页策略: 支持 offset/limit、cursor、page 三种分页模式,需根据 API 文档适配。
- 数据格式: 通常返回 JSON 或 XML,需解析并转换为结构化表。
# Python 采集 API 示例(带限流重试)
import requests
import time
def fetch_api_data(url, api_key, max_retries=3):
headers = {"Authorization": f"Bearer {api_key}"}
for attempt in range(max_retries):
resp = requests.get(url, headers=headers)
if resp.status_code == 200:
return resp.json()
elif resp.status_code == 429: # Too Many Requests
wait = int(resp.headers.get("Retry-After", 5))
time.sleep(wait)
else:
resp.raise_for_status()
return None
3.4 日志数据源与采集策略
日志数据通常由应用服务器、Web 服务器、中间件产生,具有高吞吐、持续产生的特点。采集策略分为推模式和拉模式:
- 推模式(Agent 采集): 在服务器部署采集 Agent(如 Filebeat、Fluentd),实时读取日志文件并发送到中央存储(如 Kafka、Elasticsearch)。
- 拉模式(消息队列): 应用直接将日志写入消息队列(如 Kafka、RabbitMQ),采集程序从队列消费。
- 日志格式解析: 常见格式包括 Apache/Nginx 访问日志、JSON 日志、自定义分隔符日志,需编写解析规则。
关键指标: 日志采集的吞吐量通常以 MB/s 或 万条/秒 衡量。对于高并发系统,建议使用 Kafka 作为缓冲层,避免采集程序直接写入数据库造成压力。
3.5 文件数据源与采集策略
文件数据源涵盖 CSV、Excel、Parquet、图片、文本等格式,常用于离线批量和外部数据交换。采集时需关注:
- 格式识别: 根据文件扩展名或 MIME 类型选择解析器,CSV 注意分隔符和编码(UTF-8/GBK)。
- 批量与增量: 使用文件修改时间或目录监听实现增量采集;对于大文件,支持分块读取。
- 压缩与加密: 常见压缩格式(.gz、.zip)需先解压;加密文件需提供解密密钥。
- 数据校验: 采集后校验行数、字段数、MD5 校验和,确保数据完整性。
# Python 读取 CSV 文件示例
import pandas as pd
df = pd.read_csv("user_data.csv", encoding="utf-8", sep=",")
print(f"采集行数: {len(df)}")
print(f"字段列表: {list(df.columns)}")
3.6 数据源采集架构总览
下图展示了一个典型的多数据源采集架构,涵盖数据库、API、日志、文件四种数据源的采集路径与数据流向:
3.7 采集策略选择矩阵
根据数据量级和实时性要求,选择合适的采集策略:
| 数据量级 | 实时性要求 | 推荐策略 | 典型工具 |
|---|---|---|---|
| 小(< 1GB/天) | 低(T+1) | 定时批量拉取 | SQL 脚本 + cron |
| 中(1GB~100GB/天) | 中(分钟级) | 增量采集 + 消息队列 | DataX / Flume |
| 大(> 100GB/天) | 高(秒级) | 流式采集 + 分布式缓冲 | Kafka Connect / Flink CDC |
常见陷阱: 1) 数据库全量采集未加时间戳过滤,导致重复数据;2) API 采集未处理限流,导致 IP 被封;3) 日志采集未考虑磁盘 I/O 瓶颈,影响业务应用性能。建议在采集前进行数据源摸底测试,评估吞吐量和延迟。
3.8 数据源探索清单
在开始采集前,建议按以下清单完成数据源探索:
- 数据源清单: 列出所有可能的数据源,包括数据库地址、API 端点、日志路径、文件目录。
- 数据量评估: 预估每日新增数据量、历史数据总量、峰值吞吐量。
- 访问权限: 确认数据库账号权限、API Key 有效期、文件系统读写权限。
- 数据质量检查: 抽样检查字段完整性、格式一致性、异常值比例。
- 采集频率规划: 根据业务需求确定全量/增量、实时/离线策略。