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

请问一下,在Fink中写mysql catalog里的表遇到有自增主键时要怎么处理?

请问一下,写mysql catalog里的表遇到有自增主键时要怎么处理?

展开
收起
我是三好学生 2023-04-19 16:56:59 433 0
2 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在 Flink SQL 中写入 MySQL Catalog 的表时,如果表中存在自增主键,在插入数据时需要注意以下两点:

    1. 在 INSERT 语句中不需要指定自增列,因为数据库会自动为它生成一个唯一的值。
    2. 在创建表时需要在主键列上加上 NOT ENFORCED 属性,以允许插入重复的值,从而让数据库自动分配自增值。

    例如,我们假定要向名为 mydb.mytable 的表中插入数据,该表有一个名为 id 的自增主键和一个名为 name 的普通列,可以使用以下语句:

    1. 创建表:
    CREATE TABLE mydb.mytable (
      `id`  BIGINT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255),
      PRIMARY KEY (`id`) NOT ENFORCED
    ) WITH (
      'connector.type' = 'jdbc',
      'connector.url' = 'jdbc:mysql://localhost:3306/mydb',
      'connector.table' = 'mytable',
      'connector.driver' = 'com.mysql.jdbc.Driver',
      'connector.username' = 'root',
      'connector.password' = 'password',
      'connector.write.flush.max-rows' = '5000'
    );
    
    1. 插入数据:
    INSERT INTO mydb.mytable (`name`) VALUES ('Alice'),('Bob'),('Charlie');
    

    此时,Flink SQL 将数据写入 MySQL Catalog 的表中,并自动为 id 列生成唯一的自增值。

    2023-04-30 22:47:37
    赞同 展开评论 打赏
  • 坚持这件事孤独又漫长。
    • 在Flink中,如果你想要处理MySQL中的自增主键,你可以使用Flink SQL中的SELECT语句来查询这些主键。

    • 例如,如果你有一个名为my_table的表,其中包含一个自增主键id,你可以使用以下Flink SQL查询来获取该主键:

    SELECT id FROM my_table;\
    
    • 这将返回my_table表中所有id列的值。

    • 如果你想要在Flink中处理这些自增主键,你可以使用SELECT INTO语句将这些值插入到一个新表中。例如:

    INSERT INTO my_new_table (id) VALUES (1), (2), (3);
    
    • 这将创建一个名为my_new_table的新表,其中包含id列的值,这些值将来自于my_table表中的自增主键。

    请注意,如果你使用的是Flink SQL中的SELECT INTO语句,你需要确保在插入新值之前,你已经将my_table表中的所有自增主键值都插入到了新表中。否则,新表中的自增主键值将不会正确地更新。

    2023-04-19 20:40:38
    赞同 展开评论 打赏

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

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像