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

Flink CDC有没有主键谁也不知道,没有办法不去同步没主键的表吗?

Flink CDC这个配置要求指定一个非空的字段,但是表可能是用户动态新增的,有没有主键谁也不知道,没有办法不去同步没主键的表吗?

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

    Flink CDC要求指定一个非空字段作为主键是为了保障唯一性和一致性。但是,如果没有主键的表,您可以使用一种特殊的模式来解决这个问题:

    1. 新建一个特殊字段,用于保存唯一标识,即使表本身没有主键也可以作为一个伪主键使用。
    2. 将该字段作为主键,并在定义表时指明该字段。

    下面是示例:

    CREATE TABLE example (
        id INT PRIMARY KEY,
        data VARCHAR(255)
    ) WITH (
        type = 'mysql-source',
        connector.path = '...',
        format = 'json',
        update-mode = 'append',
        scan.incremental.snapshot.chunk.size = '10000',
        source.order-by.include.fields = 'id',
        source.timestamp.column = 'timestamp'
    )
    

    在上面的例子中,'id'字段被设定为主键。这样即使原始表没有主键,也可以使用'id'字段来维护唯一性。

    2023-11-29 14:18:06
    赞同 展开评论 打赏
  • 表,有没有主键可以去问问,或者捏可以测试下表有咩有主键,此回答整理自钉群“Flink CDC 社区”

    2023-11-22 11:41:16
    赞同 展开评论 打赏
  • Flink CDC确实支持同步无主键的表。在Flink CDC for MySQL 2.4.0中,可以使用scan.incremental.snapshot.chunk.key-column参数来设置忽略无主键表。此外,Flink CDC还可以监听Oracle的redo log(相当于binlog),获取数据变更内容,从而实现对无主键的Oracle表的同步。

    对于源表和目标表都无主键的情况,可以在flink建立和sink表的关联时,指定一个字段作为主键,这个主键是为了满足flink实时同步程序的需要,实际上sink目标表可以没有主键。

    需要注意的是,由于无主键,如果使用debezium.snapshot.mode’ = ‘initial’这个参数,程序运行几次,源表数据就会同步几次到目标表,并不会去重。因此,在使用Flink CDC时,需要根据实际情况选择合适的配置参数,以确保数据同步的准确性和效率。

    2023-11-22 08:54:38
    赞同 展开评论 打赏

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

相关产品

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

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