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

Flink CDC中SQLServer多库同名表写入到一张sink表中,有什么思路吗?

Flink CDC中SQLServer多库同名表写入到一张sink表中,我有个思路是创建n个source,最后把n个source union all到一起insert到sink表中,但是问题1️:这样会创建多个连接,问题2️:后续SQLServer增删改数据时,sink端无法同步删除,只能同步增改。大佬有什么思路吗

展开
收起
cuicuicuic 2023-11-22 08:17:10 27 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    针对你的问题,我提出以下两个方案:

    1. 使用Flink SQL中的视图联合技术。你可以在Flink SQL中定义多个视图,每个视图代表一个源数据库中的表。然后,你可以使用UNION ALL操作将这些视图联合起来,形成一个新的结果集。最后,你可以把这个结果集插入到目标数据库的表中。
    CREATE VIEW view1 AS ...
    CREATE VIEW view2 AS ...
    INSERT INTO sink_table SELECT * FROM view1 UNION ALL SELECT * FROM view2;
    
    1. 使用Flink的MultipleInputs技术。你可以在Flink程序中定义多个输入源,每个输入源代表一个源数据库中的表。然后,你可以使用DataStream.union操作将这些输入源联合起来,形成一个新的数据流。最后,你可以把这个数据流插入到目标数据库的表中。
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    DataStreamSource<Row> source1 = ...;
    DataStreamSource<Row> source2 = ...;
    DataStream<Row> unionedStream = source1.union(source2);
    unionedStream.addSink(...);
    env.execute();
    

    这两种方案都可以实现将多张源数据库的表写入到一张目标数据库的表中。其中,第一种方案更加灵活,因为它可以直接在Flink SQL中完成所有操作;第二种方案则更加底层,它可以让你完全控制数据流的处理过程。

    2023-11-29 14:00:22
    赞同 展开评论 打赏
  • 等3.0 有整库同步,此回答整理自钉群“Flink CDC 社区”

    2023-11-22 11:41:18
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载