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

flinksql插入mysql的数据,mysql的id设置了自增,这个问题有遇到过吗?

flinksql插入mysql的数据,mysql的id设置了自增,但是flinksql提示要制定主键,制定主键之后,又提示id不能为空,这个问题有遇到过吗?image.png
不带提示这个

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

    这可能是由于 Flink SQL 插入数据时需要指定所有字段,包括具有自动递增值 (auto-increment) 的主键 ID。如果您在 Flink SQL 中指定了主键字段并将其设置为 NULL 或未定义值,则可能导致错误提示 "主键不能为 NULL"。
    解决此问题的一种方法是在 Flink SQL 中使用 INSERT INTO 语句时省略主键字段。这样可以避免因指定主键而出现错误。请注意,在执行 INSERT INTO 之前,请确保您的目标表中已经存在一个自动生成主键值的机制(例如 MySQL 中的 AUTO_INCREMENT 属性)。

    2023-11-15 22:32:01
    赞同 展开评论 打赏
  • inser into 的时候指定字段,不要带id,也就是sink-tabl 的主键是业务主键,这个id改成业务主键的image.png
    primary key (bill_no,type),jdbc的表,不要带id,此回答整理自钉群“Flink CDC 社区”

    2023-11-15 12:24:57
    赞同 展开评论 打赏
  • 这个问题确实存在,并且比较常见。在Flink SQL中,你需要将MySQL中的自增主键字段设置为Flink数据流中的字段之一,通常选择作为流的第一个字段。当插入一条新记录时,可以使用自增ID来指定该记录的唯一标识符,而不必手动指定ID的值。

    然而,FlinkSQL本身不支持设置自增 ID,但可以通过一些方法来实现。例如,你可以使用外部库,如 Hive 的 MAX() 函数或 Spark 的 LAG() 函数,这些函数都可以返回一组数据中的最大或最近值,从而模拟自增 ID。另一种方法是在你的DDL中声明这个自增字段。

    在使用MySQL CDC源表前,还需要确保你的MySQL和VVP网络是连通的,MySQL服务器的版本为5.6,5.7或8.0.x,并且已开启了Binlog,binlog_row_image已设置为FULL等前提条件。

    2023-11-15 09:46:03
    赞同 展开评论 打赏

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

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像