从数据库到数据湖
传统工业信息化把数据存进关系数据库:设备台账、工艺参数、生产工单各占一摊。随着物联网普及,产线上每天涌来海量的时序点、日志、图片、音视频,关系数据库装不下也处理不动,于是数据湖的概念进入工业领域:用廉价的对象存储把原始数据全部收进来,需要时再按需加工。
数据湖的价值是"先存后理":数据先低成本沉淀,业务模式想清楚了再建模。但它也带来老问题——没有治理的数据湖会退化成数据沼泽,谁也找不到、谁也不敢用。
- 湖仓一体数据湖的存储 + 数仓的治理。
- 分层设计原始层、明细层、服务层。
- 入湖同步批量 + 实时两条通道。
- 治理闭环元数据、质量、血缘。
湖仓一体是当下的主流答案:底层的湖负责容纳所有格式的数据,上层的仓负责定义表结构、保障质量和性能,让数据既便宜又可信。
湖仓一体架构
湖仓一体(Lakehouse)架构的核心是在对象存储之上加一层开放式表格式,常见的是 Iceberg 和 Hudi。它们把一批文件组织成一张可事务操作的"表",支持 ACID、时间旅行和增量读取,让数据湖具备了数仓的可靠性和查询能力。
- 存储层:对象存储或 HDFS,统一放原始与加工后的数据。
- 表格式层:Iceberg/Hudi 管理表元数据和文件清单。
- 计算层:Spark、Flink 做批流计算,查询引擎做即席分析。
- 服务层:统一元数据服务,对外暴露表和 API。
工业场景里,实时数据(设备点位)和批量数据(日报、工单)要一起进来。湖仓一体天然支持"流批一体":同一套表结构,流作业实时写入,批作业周期性补算,两边的数据能够对账一致。
数据分层与目录
湖里的数据要分层组织,每一层有清晰的职责和消费对象,这是防止数据沼泽的第一道防线。
# 数据湖分层目录示例
/raw/ # 原始层:原样接入,不改动
/raw/equipment/plc-20261027.parquet
/dwd/ # 明细层:清洗加工,统一口径
/dwd/equipment_metric/
/dws/ # 服务层:面向业务的汇总与宽表
/dws/product_yield_daily/
原始层只做归档,保留设备原始报文和采集快照;明细层做去重、补全、标准化,形成可信的明细数据;服务层面向具体业务,生成报表宽表、指标表和特征表。每一层都登记到元数据目录,写清楚负责人、更新频率和数据口径。
数据入湖与同步
入湖是数据湖运转的第一环。工业数据来源多样:MES 数据库、PLC 点位、时序库导出、文件上传,需要批量与实时两条同步通道。
// 实时入湖:Kafka 到 Iceberg 的流作业示意
DataStream stream = kafkaSource("equipment_metrics");
IcebergSink sink = IcebergSink.forTable(metricTable)
.upsert(true) // 按主键更新
.build();
stream.upsertInto(sink);
批通道适合日报、工单这类低频数据,用调度框架定时抽取;实时通道适合设备点位,用 Kafka 加流处理接入。两条通道都要做断点续传和幂等写入,任务重启不能造成数据重复或丢失。入湖后要做行数对账:源端计数和湖内计数定期比对,差异即告警。
治理与质量
数据治理决定数据湖能不能被信任。治理的对象包括元数据、数据质量、数据血缘和权限。
- 元数据:每个表、字段、分区都有描述和口径文档,新员工能看懂。
- 数据质量:配置完整性、唯一性、值域、时效性规则,异常数据自动隔离并告警。
- 数据血缘:记录每个表的上下游,出问题能快速定位是源头还是加工环节。
- 权限管控:原始数据按最小权限开放,涉密字段脱敏后才允许消费。
质量规则要在入湖环节就拦截明显脏数据:空值率超阈值、设备点位连续跳变、时间戳越界,都要在明细层被标记或剔除,而不是把脏数据一路带到报表里。
数据服务化
数据湖建设到最后,要让业务系统"用得上":提供标准化的数据服务,而不是让每个部门都自己写 SQL 翻湖。
-- 服务层提供统一视图,供报表和算法消费
SELECT product_line,
SUM(yield_count) AS yield,
ROUND(SUM(yield_count) * 1.0 / SUM(total_count), 4) AS yield_rate
FROM dws.product_yield_daily
WHERE dt = '2026-10-27'
GROUP BY product_line;
服务化有两层:一是标准 API,封装常用查询,供 MES、看板、移动端调用;二是数据服务目录,按主题发布数据集,业务方自助申请使用。指标口径要统一收敛到服务层,避免各部门各算各的,报表数字对不上。
常见问题排查
// 1. 湖里数据找不到:元数据目录没登记,先建目录再入数据
// 2. 报表数字对不上:口径不统一,收敛到服务层单一视图
// 3. 实时入湖延迟高:检查 Kafka 分区数与下游算子并行度
// 4. 数据重复:任务无幂等,启用 upsert 并按主键去重
// 5. 查询慢:小文件太多,做 compaction 合并文件
// 6. 质量告警轰炸:先治理源头,再收敛规则阈值
数据湖不是终点,把数据变成人人都能用的资产,才是终点。
分层、入湖、治理、服务化四步走下来,工业数据湖就能从"存得下"走向"用得好",成为数字工厂真正的基础设施。