Flink临时表与永久表适用场景及作业重启影响问题咨询
Flink临时表与永久表说明及部署问题解答
临时表与永久表优劣对比
临时表
- 优势:
- 上手成本极低,无需额外部署配置Hive Metastore等外部持久化catalog,直接在作业代码中编写
CREATE TEMPORARY TABLE语句即可使用 - 生命周期与当前Flink会话/作业绑定,不会污染全局元数据,测试调试阶段不会产生多余的元数据垃圾
- 表定义灵活,同一个表名可在不同作业中按需定义不同的schema、connector参数,互不影响
- 上手成本极低,无需额外部署配置Hive Metastore等外部持久化catalog,直接在作业代码中编写
- 劣势:
- 元数据不持久化,仅当前会话/作业可见,作业停止后表定义自动清除,无法跨作业共享表定义
- 无元数据版本管理能力,表定义变更完全依赖作业代码维护,多人协作时容易出现定义不一致的问题
永久表
- 优势:
- 元数据持久化存储在外部catalog(如Hive Metastore)中全局可见,跨作业、跨会话可共享同一份表定义
- 支持元数据版本管理、权限管控,适配企业级多团队协作场景
- 表定义与作业代码解耦,schema变更可直接在catalog侧修改,适配前提下无需调整作业代码
- 劣势:
- 上手门槛高,需要提前部署配置对应catalog服务,完成连通性、权限相关配置,小作业快速验证的额外成本高
- 表定义全局生效,修改会影响所有依赖该表的作业,变更风险更高
- 多团队共用测试catalog时,容易出现元数据混乱的问题
适用场景
- 临时表适用场景:
- 快速验证的Demo、测试作业,或小团队内部的简单离线/实时作业
- 仅单作业使用的源表/结果表,无需和其他作业共享表定义
- 临时数据探查、即席查询场景
- 永久表适用场景:
- 企业级生产环境,多团队/多作业共享同一份数据源的场景
- 需要对元数据做权限管控、版本管理的核心业务作业
- 数仓体系内的分层表,需要统一schema规范的场景
临时表场景下重新部署作业的影响
只要重新部署作业时,代码中保留了完整的临时表定义语句,且表的schema、connector配置与之前运行的版本无冲突,绝大多数场景下不会出现问题,仅两种特殊情况需要注意:
- 若从Checkpoint/Savepoint恢复作业,需保证临时表的定义(尤其是schema、connector核心参数)和上次作业运行时的定义完全一致,否则会出现状态不兼容、读写数据源报错的问题
- 若作业依赖的外部存储(如Kafka、MySQL)的表结构发生变更,但临时表定义未同步更新,重启后会出现读写数据格式异常的问题
补充说明:官方文档提到的临时表失效,仅指表元数据不会在Flink集群侧持久化存储,只要每次提交作业时都在代码中重新声明了临时表,就能正常使用,不会因为之前的作业停止导致新提交的作业找不到表。
内容的提问来源于stack exchange,提问作者Alfred
相关产品推荐
相关产品推荐

