工业数据的多源异构特征比任何行业都突出。一条产线的数据资产包括:PLC寄存器的高频过程数据(毫秒级采样)、MES的生产批次数据(关系型结构)、设备维护手册(PDF文档)、质检图像(非结构化二进制)、现场监控视频(流媒体)、巡检录音(音频)。这些数据的格式、频率、生命周期和消费场景完全不同,但都属于同一产线的数字资产。工业互联网平台的数据湖工程定位,就是为这些异构数据提供统一的存储底座和治理框架。
数据湖与数据仓库的分界
数据湖和数据仓库不是替代关系,而是互补关系。理解两者的边界,决定了工业平台的数据架构是否合理。
数据仓库采用Schema-on-Write模式——数据入库前必须定义表结构,ETL过程清洗和转换数据,存储的是加工后的数据。查询性能好,但灵活性低——新增数据源需修改ETL管道,周期以天计。
数据湖采用Schema-on-Read模式——原始数据直接存储,读取时才定义解析方式。存储的是未加工或轻度加工的数据。灵活性高——新增数据源只需上传文件并注册元数据,但查询性能依赖计算引擎的优化能力。
工业场景的合理架构是分层共存:原始数据进数据湖(Bronze层),清洗后的结构化数据进数据仓库或专用数据存储(Silver/Gold层),高频实时数据进专用数据平台而非数据湖。
分层架构:Bronze/Silver/Gold
数据湖的分层架构(Medallion Architecture)将数据按加工程度分层管理。每层有明确的职责和质量标准。
数据湖分层 | 数据状态 | 写入来源 | 质量标准 | 典型存储 |
Bronze(铜) | 原始数据 | 设备/MES/传感器 | 格式完整即可 | 对象存储+原始格式 |
Silver(银) | 清洗数据 | Bronze处理 | 去重、类型校验、补缺 | Parquet/ORC列存 |
Gold(金) | 聚合数据 | Silver处理 | 业务就绪、维度完整 | 数据仓库/物化视图 |
Bronze层是原始数据的落地点。设备数据以原始报文格式存储(Protobuf/JSON/CSV),不做任何清洗。Bronze层的写入吞吐是设计重点——高频设备数据每秒写入百万条记录,存储层必须支撑这一吞吐。写入采用批量追加方式(Append-Only),不允许修改——原始数据的不可变性是数据湖的基本约束。
Silver层做数据清洗。去除重复数据(设备重传导致)、校正数据类型(字符串转数值)、补齐缺失字段(默认值填充)。Silver层的数据已经是结构化的——使用Parquet或ORC列式存储格式,列裁剪和谓词下推能力使查询效率显著优于Bronze层的原始格式。
Gold层是面向业务的数据服务层。按业务主题聚合——设备主题表、批次主题表、质量主题表。Gold层的数据可直接用于BI报表、数据挖掘和机器学习训练。Gold层通常物化存储在数据仓库或专用分析引擎中,而非留在数据湖的对象存储里。
存储与格式选型
对象存储(S3/MinIO)是数据湖的物理底座。对象存储提供了几乎无限的容量扩展能力和按需付费的计费模型。MinIO作为S3兼容的开源对象存储,在工业私有云场景中广泛使用。其优势是部署简单——单节点可启动,分布式模式通过纠删码(Erasure Coding)提供数据冗余。
元数据管理通过Hive Metastore统一。数据湖中的文件需要元数据描述——文件路径、Schema定义、分区规则。Hive Metastore作为元数据目录,Presto/Trino/Spark等计算引擎通过它发现数据的位置和结构。Iceberg和Delta Lake提供了更强的元数据管理——事务性写入、Time Travel(历史版本查询)、Schema Evolution(自动Schema迁移)。
存储格式 | 存储模式 | 压缩率 | 查询性能 | 工业适用场景 |
Parquet | 列存 | 高(Snappy/ZSTD) | 列裁剪+谓词下推 | 分析型查询 |
ORC | 列存 | 高(ZLIB/ZSTD) | 与Hive生态深度集成 | Hive生态环境 |
Avro | 行存 | 中(Deflate/Snappy) | 序列化/反序列化快 | 数据管道传输 |
Delta/Iceberg | 表格式 | 取决于底层格式 | ACID事务+Time Travel | 需要数据更新的场景 |
数据格式选择取决于消费模式。如果主要是分析型查询(按列聚合、过滤),Parquet是首选——列裁剪避免读取不需要的列,Snappy压缩减少IO。如果数据需要频繁序列化传输(Kafka到存储),Avro的Schema Evolution能力更强。如果数据需要更新和删除(修正错误数据),Delta Lake或Iceberg的ACID事务能力是必需的——传统数据湖的Append-Only模型无法处理数据修正需求。
查询引擎集成
数据湖的查询性能不完全取决于存储层,查询引擎的选择同样关键。
Presto/Trino提供联邦查询能力。工业平台的数据分散在多个存储系统——TDengine存高频设备数据,数据湖存历史归档数据,MySQL存设备台账。Presto通过Connector机制连接不同数据源,一条SQL查询可跨系统关联——设备状态从TDengine查,设备台账从MySQL查,JOIN后返回统一结果。这种联邦查询避免了数据搬移,每个数据源保留在最适合它的存储引擎中。
Spark处理批量计算。数据湖的ETL(Bronze→Silver→Gold)管道通常用Spark实现——Spark SQL读取Bronze层原始数据,执行清洗转换,写入Silver层。Spark的批量处理模式适合大规模历史数据重算——比如设备数据格式变更后,需要重新处理一年的历史数据。
联邦查询的代价是性能。Presto跨数据源JOIN时,数据需要在内存中传输,如果两个数据源的数据量都很大,网络传输和内存压力显著。设计时需评估——高频查询走专用存储(TDengine直接查询),低频分析走联邦查询(Presto跨系统关联)。
数据沼泽:治理缺失的后果
数据湖的最大风险不是技术选型,而是治理缺失导致的数据沼泽。
数据沼泽的特征是:有数据无治理——数据进了湖但没人知道含义、来源和质量。查询数据湖时发现同一指标有多个版本——"设备运行率"在Bronze层有一份原始计算、Silver层有一份清洗后计算、Gold层有一份聚合后计算,三者数值不一致,没人知道哪个是权威值。
治理框架的核心是数据目录(Data Catalog)。数据目录记录每个数据集的元信息——数据Owner、来源系统、Schema定义、质量指标、更新频率。Apache Atlas和Amundsen是开源数据目录工具。数据目录的价值在于可发现性——分析师搜索"设备温度",目录返回所有包含设备温度数据的数据集及其位置、质量和Owner。
数据质量监控是治理的执行层。在Silver层写入时,质量规则引擎校验数据——数值范围(温度不超过500°C)、完整性(关键字段非空)、一致性(同一设备的温度趋势不能突变超过100°C/s)。规则违反时写入质量告警表,不阻断写入但标记质量状态。
专用数据层与数据湖的互补
工业平台的数据架构不应是"全部进数据湖"的一刀切方案。不同数据类型有最适合的存储引擎。
高频设备数据(毫秒级采样、百万级标签)写入数据湖会导致Bronze层文件碎片化——小文件过多,查询时打开文件开销巨大。这类数据应优先写入专用数据平台,按时间分区管理,查询直接走专用引擎。历史数据归档时再导出到数据湖作为Bronze层的一部分。
非结构化数据(图像、文档、视频)适合对象存储——这类数据不参与SQL查询,通过文件路径引用。设备维护手册、质检图像、巡检视频统一存对象存储,元数据(设备ID、拍摄时间、检测结论)存数据湖。
TDengine作为AI原生工业数据平台,在数据湖架构中定位为时序数据专用层。高频设备数据直接写入TDengine,利用其原生时序引擎的高吞吐写入和高效聚合查询能力。数据湖作为历史归档和非时序数据存储的补充——两者互补而非替代。这种分层架构避免了数据湖处理高频时序数据时的性能瓶颈,也避免了专用平台处理非结构化数据时的能力局限。
结语
数据湖的工程价值在于提供了异构数据的统一存储底座和治理框架。分层架构(Bronze/Silver/Gold)将数据按加工程度管理,格式选型(Parquet/Delta/Iceberg)匹配查询模式,联邦查询(Presto/Trino)实现跨系统数据关联。
数据沼泽的规避不靠技术选型而靠治理体系——数据目录提供可发现性,质量监控保证数据可信。工业平台的数据架构应坚持专用引擎与数据湖共存的分层策略:高频实时数据走专用平台,历史归档和非结构化数据走数据湖。这种分层是工程理性的选择,不是架构复杂化。

























