mysql cdc表做Flink sql join 的时候支持FOR SYSTEM_TIME AS OF 语法吗?
在 Flink SQL 中,FOR SYSTEM_TIME AS OF 是一个时间版本化的 join 语法,用于执行 temporal join,这通常用来在一段指定的时间点上加入一个静态或者慢变化数据集。而在 Flink 1.11+ 版本中,通过在 DDL 中定义 primary key 并且使用 CREATE TEMPORAL TABLE FUNCTION,你可以将 Change Data Capture (CDC) 中来自 MySQL 等数据库的实时变更流作为 temporal table 以进行 temporal join。
但是,FOR SYSTEM_TIME AS OF 在用于真正意义上从外部系统(如 MySQL;经过 Flink CDC 连接器读取的)进行 temporal join 时,会有一些限制。因为这种 join 需要对历史数据有完整的、可查询的支持,而简单的 Flink CDC 流可能无法提供这样的历史视图;特别是当查询一个过去的时间点时,这个点很可能不在 Flink 任务当前的状态中。
所以,如果你想要基于 CDC 流执行 Flink SQL 中的 temporal join,你需要:
DML Support:使用 Flink 1.13 或更高版本,这些版本提供了 DML (Insert/Update/Delete)语法的支持,可以更好地配合 Flink CDC 连接器。
使用 Flink 1.12+ 的 CREATE TEMPORAL TABLE FUNCTION:
在这些版本中,Flink 对 temporal table 的支持使得能直接定义和使用 temporal table function。
历史数据维护:
维护历史数据视图,例如使用 versioned table 的概念,或者使用其他外部系统维护历史记录。
使用 Stateful Temporal Join:
对于直接的流处理 temporal join,利用 Flink 的状态管理可以实现简单的 temporal join,但对历史数据具有一定的限制。
查询能力:
需要确保能够查询到“AS OF”语法中的历史时间点的状态,这通常需要额外的持久化历史数据支持。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。