物化表(Materialized Table)是Flink SQL引入的一种新的表类型,旨在简化批处理和流处理数据管道,提供流批一体化的开发体验。创建物化表时无需声明字段与类型,通过指定数据新鲜度和查询语句,Flink引擎将从查询语句自动推导物化表的Schema,并创建相应的数据刷新管道,以达到指定的数据新鲜度。
背景信息
在不同的业务场景下,业务层对于数据的时效性有着不一样的要求:
风控场景对数据时效性要求高,通常需要秒级到毫秒级。
用户画像、实时推荐等场景通常分钟级即可满足需求。
BI报表、历史数据同环比分析等场景实效性较低,通常天级数据即可满足需求。
尽管传统的数仓架构下Kappa和Lambda两套架构能在一定程度上支持业务需求,但其各自的缺点也十分明显,缺少一个能满足不同业务时效性要求的一体化架构。
Flink作为流批一体的计算引擎,致力于能提供一套完整的技术方案来解决业务对数据不同时效性的要求。基于Apache Paimon提供了物化表能力,通过物化表,您可以在数据湖上构建流批一体的计算能力,从而搭建一套新的数据开发范式,通过数据层、元数据层,计算层的统一,解决您在原有架构下,数据多份存储、数据口径对齐复杂、任务需要在不同引擎开发的痛点,实现真正的流批一体。
物化表优势
物化表通过对表的数据新鲜度的定义代替传统的流批描述,您仅需要声明数据需要刷新的频次,即可实现对数据的不同周期的刷新,屏蔽复杂的流批开发和相关配置,数据口径将天然对齐。
声明式ETL:简化ETL的过程,降低ETL复杂度,表Schema自动推导生成。
流批一体:通过对数据新鲜度的修改,实现作业流批的无缝切换。基于您数据新鲜度的定义,Flink将自动管理和编排数据。
简化运维:Flink自动管理对数据的刷新能力,提供数据血缘视角下各物化表的关联关系,提供级联更新能力。
性能提升:通过增量处理能力,显著提高物化表的数据更新性能,节省资源。
物化表核心概念
数据新鲜度:定义了物化表数据相对于基础表更新的最大滞后时间。
刷新模式:
持续模式:流作业会增量更新物化表数据,下游数据会立即可见,或者等Checkpoint完成时才可见。
全量模式:工作流定期触发对物化表数据的全量覆盖,其数据刷新周期与数据新鲜度相匹配。默认覆盖是表级别,如果有分区字段存在,可选择是否重新刷新最新分区或更新全部分区。
查询定义:物化表支持所有Flink SQL查询。查询结果用于填充物化表。在持续模式下,查询结果会持续更新到物化表中;而在全量模式下,每次查询结果都会覆盖更新到物化表。
Schema:物化表可以声明主键和分区字段。其列名和类型会从相应的查询语句中推导,无需声明字段和类型。
物化表工作原理
在创建物化表时,您需要指定数据的新鲜度和查询语句。Flink引擎将自动推导出物化表的Schema,并在Catalog中创建物化表,同时还会创建相应的数据更新作业,以按您指定的新鲜度自动完成物化表的数据刷新。
例如,您可以设置物化表C的数据新鲜度为30 min,则物化表C的数据比基础表(物化表A)至少滞后30 min更新。您也可以根据实际业务需要设置更长的物化表数据新鲜度以降低成本。
典型场景
物化表提供的是流批一体的新湖仓范式,旨在提供更加快速易用的开发体验,同时帮助您显著降低存储和运维的成本,以下场景更适合使用物化表。
历史数据修正
由于数据传输延时等问题可能导致最终数据存在部分失真,因此通常需要单独开发离线作业,对历史分区上的数据进行修正,以保证最终结果的正确性。通过物化表的手动刷新能力,您可以在任意时间更新数据的历史分区,且可以根据血缘关系对下游所有关联的物化表进行统一更新,一键完成修正。同时,物化表特有的增量计算能力也有别于普通的批计算补数据场景,计算时会根据中间聚合状态减少需要参与计算的数据量,成本更低、更新效率更高。
数据口径对齐
Lambda架构下离线和实时的数据需要存储在不同的业务系统中,处理逻辑与建表字段无法自然对齐,需要在应用层做大量的拼接逻辑(比如同比、环比数据计算),搭建计算的逻辑复杂且容易出错。使用物化表后,您的数据仅存储一份,同时仅存在一张业务表,不需要进行复杂的拼接计算,不仅节省您的存储资源,还节省了大量的开发与数据对齐口径问题,显著提高开发效率。
数据大屏实时统计
数据大屏在不同业务场景下对数据刷新的时间要求各不相同。例如,电商数据大屏在日常业务中对数据的新鲜度要求通常为小时或天级。然而,在双十一大促期间,数据的新鲜度需求可能提升至分钟级别。物化表可以通过简单的数据新鲜度修改,实现从天级到分钟级的数据刷新的能力,无需您单独搭建实时链路,从而使实时化变得更加便捷。
如何使用物化表
文档 | 说明 |
了解如何创建物化表,以及进行历史数据回刷、修改新鲜度、查看物化表血缘关系。 | |
了解如何基于Paimon和物化表,构建流批一体的湖仓分析处理链路,以及通过修改表数据新鲜度,完成由批到流的切换,实现数据实时更新。 |
相关文档
Apache Paimon是一种流批统一的数据湖存储格式,可以快速地在云端OSS上构建数据湖存储服务,详情请参见基于Paimon的Streaming Lakehouse方案。
通过Flink+Paimon+StarRocks搭建流式湖仓,详情请参见基于Flink搭建流式湖仓OpenLake方案。