开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

mysql cdc表做Flink sql join ,支持这个语法吗?

mysql cdc表做Flink sql join 的时候支持FOR SYSTEM_TIME AS OF 语法吗?

展开
收起
wenti 2023-02-06 17:25:34 163 0
3 条回答
写回答
取消 提交回答
  • 在 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”语法中的历史时间点的状态,这通常需要额外的持久化历史数据支持。

    2024-02-27 15:32:28
    赞同 展开评论 打赏
  • Flink支持使用FOR SYSTEM_TIME AS OF语法进行SQL JOIN操作。

    2023-02-06 22:24:25
    赞同 展开评论 打赏
  • 支持——该回答整理自钉群“Flink CDC 社区”

    2023-02-06 20:36:55
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    SQL Server 2017 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

    相关镜像