spark 写mysql 设置主键_upsert在mysql中的实现(附spark应用)

upsert概述以及在mysql中的实现

upsert是update和insert的合体,这里暂时不对其具体的语义进行探讨,简单对其做一个定义,基本功能为:存在时更新,不存在时插入,简单的解释就是,当某种条件成立时使用update,条件不成立时使用insert。

在很多场景下,我们少不了使用upsert功能,比如数据增量处理,商品状态更新等,而在mysql中并没有这样的一种语句,如果我们先查询是否存在,再选择使用update或者insert,这样不仅比较复杂而且还容易造成事务上的冲突,不过后来发现有方式实现这种需求,那就是ON DUPLICATE KEY UPDATE。

举个栗子:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

ON DUPLICATE KEY UPDATE需要配合UNIQUE索引或PRIMARY KEY使用。

这句sql的基本解释为,当UNIQUE索引或PRIMARY KEY的字段在表中不存在时,行作为新记录被插入,如果字段存在,则执行ON DUPLICATE KEY UPDATE后面的逻辑,这里就是c=c+1。

这里我们可以将字段a设置为唯一索引或者主键,还可以将a,b设置为联合唯一索引,就能实现upsert的需求,具体如何应用还是要看具体的场景和需求。

spark写入mysql使用upsert

一般存入mysql中的数据都是结构化的数据,这里我推荐先将RDD转为dataframe,再进行数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值