一、数据源概述:到底什么是数据源?

说实话,我做了十几年数据工程,每次跟新人聊「数据源」这个词,大家第一反应都是:「不就是数据库吗?」

嗯,对,但不全对。

数据源,说白了就是数据的来源地。它可以是数据库、文件、API接口,甚至是你桌上那张皱巴巴的Excel表格。我个人习惯把数据源定义为:任何能够产生或存储数据,并且可以被我们程序读取的地方

核心定义:数据源 = 数据产生的位置 + 数据存储的载体 + 数据访问的接口

数据源在数据工程中的角色

数据工程说白了就三件事:拿数据、管数据、用数据。而数据源,就是「拿数据」这第一步。

我经常跟团队讲一个比喻:数据工程就像做饭。数据源就是菜市场。你菜买得不好,后面厨艺再好也白搭。我在项目中遇到过太多次了——数据源质量差,后面清洗、建模全白干。

数据源在数据工程中扮演这几个关键角色:

  • 数据入口:所有数据管道的第一站,决定了你能拿到什么数据
  • 质量源头:数据质量问题的80%都出在数据源端
  • 性能瓶颈:数据源的读取速度往往决定了整个管道的吞吐量
  • 安全边界:数据源的访问权限管理是数据安全的第一道防线

我的经验:选数据源的时候,别光看它能不能用。你得想清楚——它稳定吗?它支持并发吗?它会不会半夜挂掉?我曾经因为选了个不靠谱的第三方API做数据源,结果凌晨三点被电话叫醒...嗯,从那以后我选数据源都先做压力测试。

数据源的三大分类

数据源怎么分类?其实就三种:结构化、半结构化、非结构化。你想想看,这世界上所有的数据,跑不出这三个筐。

1. 结构化数据

结构化数据,就是那种规规矩矩、行是行列是列的数据。每一行代表一条记录,每一列代表一个字段,字段类型固定。

典型代表:

  • 关系型数据库(MySQL、PostgreSQL、Oracle)
  • Excel表格(严格意义上的)
  • CSV文件

举个例子:

-- 这就是结构化数据
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    email VARCHAR(100)
);

INSERT INTO users VALUES 
(1, '张三', 28, 'zhangsan@example.com'),
(2, '李四', 32, 'lisi@example.com');

结构化数据的好处是什么?查询快、好分析、容易做关联。我在做电商数据平台的时候,订单表、用户表、商品表全是结构化数据,用SQL一把梭,效率极高。

2. 半结构化数据

半结构化数据,说白了就是有结构但结构不固定。它有标签、有层级,但同一类数据的字段可以不一样。

典型代表:

  • JSON / XML
  • YAML配置文件
  • HTML文档
  • 日志文件(部分)

看个例子就明白了:

{
  "user": {
    "id": 1,
    "name": "张三",
    "contacts": [
      {"type": "email", "value": "zhangsan@example.com"},
      {"type": "phone", "value": "13800138000"}
    ]
  }
}

注意看,contacts数组里每个对象的字段是一样的,但你可以随时加一个新字段,比如加个"wechat"。这在结构化数据里就得改表结构,但在半结构化数据里,直接写进去就行。

避坑指南:我曾经接手过一个项目,日志数据用JSON存,但不同模块写的JSON字段名不统一——有的用"user_id",有的用"userId",有的用"uid"。解析的时候简直想骂人。所以,半结构化数据虽然灵活,但一定要有规范约束

3. 非结构化数据

非结构化数据,就是没有固定格式、没法直接用行列表示的数据。这类数据占到了企业数据总量的80%以上。

典型代表:

  • 文本文件(TXT、PDF、Word)
  • 图片(JPEG、PNG)
  • 音频(MP3、WAV)
  • 视频(MP4、AVI)
  • 二进制文件

非结构化数据怎么处理?一般靠特征提取。比如图片提取像素特征,文本提取关键词,音频提取频谱特征。处理起来比结构化数据麻烦得多,但价值也大。

我记得有个项目要做用户评论的情感分析。评论数据全是中文文本,非结构化。我们先用NLP提取情感特征,再转成结构化数据存到数据库里。这一步处理,占了整个项目60%的工作量。

三种数据源的对比

维度 结构化 半结构化 非结构化
格式 固定模式(Schema) 自描述(Self-describing) 无固定格式
存储 关系型数据库 NoSQL、文件 对象存储、文件系统
查询 SQL,高效 特定查询语言 需提取后查询
灵活性 低(改结构麻烦)
处理难度
典型场景 交易记录、用户信息 日志、配置文件 图片、视频、文档

知识体系总览

下面这张图,是我自己梳理的数据源知识体系。你看一眼,就能把这一章的内容串起来。

数据源知识体系 定义 数据产生与存储的源头 包含位置+载体+接口 角色 数据入口 质量源头 · 性能瓶颈 三大分类 结构化/半结构化/非结构化 结构化数据 • 固定Schema,行列分明 • 关系型数据库存储 • SQL查询,高效精准 • 代表:MySQL、PostgreSQL 半结构化数据 • 有标签/层级,结构灵活 • NoSQL或文件存储 • 自描述,可扩展 • 代表:JSON、XML、YAML 非结构化数据 • 无固定格式 • 对象存储/文件系统 • 需特征提取后使用 • 代表:图片、视频、文本 选数据源 = 选对类型 + 评估质量 + 规划接入方式

小结

这一章我们聊了数据源的定义、角色和分类。说白了就三句话:

  • 数据源是数据工程的起点,选不好后面全白搭
  • 结构化数据最规矩,适合做精确分析
  • 半结构化和非结构化数据更灵活,但处理起来也麻烦

我个人建议,刚开始做数据工程的朋友,先从结构化数据入手。把MySQL、CSV这些玩熟了,再去碰JSON、日志、图片这些。一步一个脚印,稳着来。

一个小技巧:判断一个数据源属于哪一类,你就问自己三个问题——它有固定的列吗?它的字段类型统一吗?我能直接用SQL查吗?三个「是」就是结构化,两个「是」就是半结构化,全「否」就是非结构化。


专注资料整理