传统数仓架构(如Lambda/Kappa)面临三大核心痛点:流批处理架构的分离导致开发与维护成本的增加,多副本存储造成存储资源的浪费,以及跨层数据口径对齐的复杂性引发一致性风险。为应对这些挑战,引入了物化表(Materialized Table),其基于数据的新鲜度(分钟/天级)和查询语句自动生成表结构(Schema),并建立持续刷新的数据管道。此机制将流批处理逻辑统一为单一路径,不仅消除了冗余存储副本,而且保障了全链路数据口径的一致性,从而显著简化了实时数仓的运维复杂度。
物化表核心概念
物化表工作原理
物化表需明确定义两个核心参数:数据新鲜度(FRESHNESS)和查询语句(AS SELECT)。Flink引擎通过查询结果自动推导Schema,并在Catalog中注册物化表结构,同时根据新鲜度配置自动创建流式或批处理作业来维护数据更新。
如图所示,当物化表C的新鲜度设置为30分钟时,系统会最大限度地保证该表数据相对于基表(如物化表A)的滞后时间不超过该阈值,且下游表的新鲜度必须为上游的整数倍(如60分钟或90分钟)。通过延长新鲜度参数(最大支持1天),可降低高频更新带来的资源消耗,例如将分钟级更新调整为小时级批量更新。
应用场景
物化表通过流批一体的湖仓范式设计,在以下场景中具有显著的技术与成本优势:
历史数据修正。
由于数据传输延时等问题可能导致最终数据存在部分失真,因此通常需要离线作业对数据进行修正。物化表的刷新能力允许在任意时间更新数据,同时对下游所有关联的物化表进行统一更新。
数据口径对齐。
在Lambda架构中,离线和实时数据需分别存储于不同的业务系统中,处理逻辑与建表字段难以实现自然对齐。物化表可以确保数据仅存储一份,避免了复杂的拼接计算。这不仅有效节省了存储资源,还显著减少了数据对齐口径问题的。
动态数据大屏实时统计。
动态数据大屏在不同业务场景下对数据刷新的时间要求存在显著差异。物化表可以通过简单调整数据的新鲜度,实现从天级到分钟级的数据刷新能力,无需单独建立实时链路,从而使实时化过程变得更加便捷。
如何使用物化表
文档 | 说明 |
了解如何创建物化表,以及进行历史数据回刷、修改新鲜度、查看物化表的血缘关系。 | |
了解如何基于Paimon和物化表,构建流批一体的湖仓分析处理链路,以及通过修改表数据新鲜度,完成由批到流的切换,实现数据实时更新。 |
基于物化表构建流批一体湖仓演示
视频仅供参考,具体界面及功能以实际控制台为准。
相关文档
Apache Paimon是一种流批统一的数据湖存储格式,可以快速地在云端OSS上构建数据湖存储服务,详情请参见基于Paimon的Streaming Lakehouse方案。
通过Flink+Paimon+StarRocks搭建流式湖仓,详情请参见基于Flink搭建流式湖仓OpenLake方案。