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

Flink CDC监听的表是datastream,然后通过table api拿到维表,是这样吗?

Flink CDC监听的表是datastream,然后通过table api拿到维表,把table api再转成datastream,最后join,是这样吗?

展开
收起
真的很搞笑 2023-11-07 08:05:07 75 0
3 条回答
写回答
取消 提交回答
  • 我这边是sql操作的比较多,没有这么多转换操作,直接都用table-api就行,此回答整理自钉群“Flink CDC 社区”

    2023-11-08 07:42:41
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,Flink CDC 可以监听表,并将其转换为 DataStream,然后再通过 Table API 将 DataStream 转换为 Table,最后执行 Join 操作。
    具体来说,可以通过以下步骤实现:

    1. 定义 FlinkCDCSource 和 DataStream,监听表中的数据变化,并将其转换为 DataStream。
    2. 使用 Table API 的 toTable 方法,将 DataStream 转换为 Table。
    3. 使用 Table API 的 join 方法,将表进行 Join 操作。

    例如:

    val stream = env.addSource(new FlinkCDCSource())
    
    val table = stream.toTable(env)
    
    val result = table.join(otherTable)
    

    在 Join 操作完成后,可以将结果再转换为 DataStream,以进一步进行处理或输出。
    需要注意的是,在 Join 操作中,需要保证两边表的 Key 相同,否则 Join 操作会失败。此外,Join 操作可能会导致较大的内存消耗,需要谨慎使用,并合理设置相关参数以确保系统稳定性。

    2023-11-07 14:32:39
    赞同 展开评论 打赏
  • 是的,你的理解是正确的。Flink CDC会监听指定的表,并把数据转换成DataStream。在Flink SQL中,我们可以使用这些DataStream来创建Table API,然后通过这个Table API获取到维表的数据。获取到维表的数据后,我们把这个Table API再转换回DataStream。最后,我们就可以把这个DataStream和之前流处理得到的DataStream进行join操作了。

    目前Flink支持的维表JOIN操作是对当前时刻维表快照的关联,也就是说它处理的是处理时间语义,而不支持事实表rowtime所对应的的维表快照。此外,从实时计算引擎VVR 4.0开始,你可以通过Flink SQL Hints为维表Join指定表联接时使用的联接策略,来达到优化执行的目的。

    2023-11-07 10:04:03
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Spring Boot2.0实战Redis分布式缓存 立即下载
    CUDA MATH API 立即下载
    API PLAYBOOK 立即下载