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

Flink CDC不带ID会报:没有update和DELETE操作?

Flink CDC不带ID会报:please declare primary key for sink table when query contains update/delete record.
我参考你之前的回答使用了其他字段做业务ID,但是业务上也不太行,现在就是想所有的数据都是insert,没有update和DELETE操作?

展开
收起
真的很搞笑 2023-11-30 15:38:58 109 0
3 条回答
写回答
取消 提交回答
  • 你带上union_key就行了,你应该是没设置union_key,一般我们公司id没有业务含义,仅仅是自增排序使用,union_key 才是真正意义上业务使用的 id,比方说,我司是一个to b的公司,现在有一张表企业基础信息表corp_basic:
    id,corp_id,corp_name这个字段,那你在mysql建表corp_basic的时候,需要为corp_id 设置union_key,这样你在flink 的ddl上设置corp_id 是主键就行。,此回答整理自钉群“Flink CDC 社区”

    2023-11-30 20:44:37
    赞同 展开评论 打赏
  • 要实现所有的数据都是INSERT操作,没有UPDATE和DELETE操作,您可以使用Flink CDC的要实现所有的数据都是INSERT操作,没有UPDATE和DELETE操作,您可以使用Flink CDC的upsert-kafka模式。在这种模式下,当有新的数据插入时,Flink CDC会将数据写入Kafka;当有更新或删除操作时,Flink CDC不会将这些操作写入Kafka,而是直接在源数据库中执行。

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

    如果您希望在 Flink CDC 中所有的数据都是 INSERT 操作,而没有 UPDATE 和 DELETE 操作,可以考虑以下几种方法来实现:

    1. 使用 INSERT_ONLY 模式:在 Flink CDC 中,如果支持 INSERT_ONLY 模式,可以直接配置为只捕获 INSERT 操作,并忽略 UPDATE 和 DELETE 操作。然而,并非所有 CDC 工具都支持此模式,需要查看具体的 CDC 工具或 Connector 的文档。

    2. 过滤 UPDATE 和 DELETE 操作:在 Flink 任务中,您可以使用自定义函数或操作符来过滤掉 UPDATE 和 DELETE 操作,只保留 INSERT 操作。例如,在 Table API 中,可以使用 filter 方法来过滤出 INSERT 操作,如 filter($"op" === "i")。这样可以确保只处理 INSERT 操作相关的数据。

    3. 修改数据源端逻辑:在数据源端进行修改,确保只有 INSERT 操作被触发,而不产生 UPDATE 或 DELETE 操作。这可能需要根据具体的业务需求和数据源类型进行更改,例如通过使用触发器、自定义存储过程等方式来限制数据操作。

    2023-11-30 16:01:35
    赞同 展开评论 打赏

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

相关产品

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

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