sparkStreaming插入mysql 必须考虑到实时更新老的key
原先使用批次提交更新 但数据库无变化,不得不一条一条的插入 公司数据量不大 还未做数据量大的测试 但实时更新是可以的
关键sql :
insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}进行老的主键key的实时更新
areaStartAmt.foreachRDD(rdd => {
rdd.foreachPartition(partitionOfRecords => {
if (partitionOfRecords.isEmpty) {
println("This RDD is not null but partition is null")
} else {
// Class.forName("com.mysql.jdbc.Driver")
// var connection: Connection = null
// try {
// connection = DriverManager.getConnection(url, username, password)
// connection.setAutoCommit(false)
// val time = System.currentTimeMillis() / 1000
// // val sql = "insert into test (bc_person,amt) values(?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
// val sql1 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) ON DUPLICATE KEY UPDATE `amt`= ?"
// // val sql3 = "insert into area_user_amt (date,country,provence,amt) values(?,?,?,?) "
// val pstmt = connection.prepareStatement(sql1)
// var count = 0
// partitionOfRecords.foreach(record => {
// // pstmt.setString(1, record._1)
// // pstmt.setInt(2, record._2.toInt)
// // pstmt.setInt(3, record._2.toInt)
// val info = record._1.split("_")
// // if(info.length==3){
// pstmt.setString(1, info(2))
// pstmt.setString(2, info(0))
// pstmt.setString(3, info(1))
// pstmt.setInt(4, record._2.toInt)
// pstmt.setInt(5, record._2.toInt)
// pstmt.addBatch()
// count += 1
// if (count % 500 == 0) {
// pstmt.executeBatch()
// connection.commit()
// }
// })
// pstmt.execute()
// connection.commit()
// } finally {
// if (connection != null)
// connection.close()
// }
val connection = DriverManager.getConnection(url, username, password)
partitionOfRecords.foreach(record => {
var datekey = record._1.split("_")(2)
var countrykey = record._1.split("_")(0)
var provencekey = record._1.split("_")(1)
var amt = record._2
val sql1 = s"insert into area_user_amt (date,country,provence,amt) values('${datekey}','${countrykey}','${provencekey}','${amt}') ON DUPLICATE KEY UPDATE `amt`= '${amt}'"
// val sql = s"select * from area_user_amt where date='${datekey}' and country='${countrykey}' and provence='${provencekey}'"
val stmt = connection.createStatement()
val code = stmt.executeUpdate(sql1)
//返回值
if (code < 0) {
println("更新失败")
}
else {
// println("更新成功")
}
sparkStreaming插入mysql 必须考虑到实时更新老的key的更多相关文章
- (转载)mysql 存在该记录则更新,不存在则插入记录的sql
(转载)http://www.codesky.net/article/201003/105754.html 代码如下: INSERT table (auto_id, auto_name) values ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- mysql插入记录INSERT与多表更新
1.第一种:INSERT [INTO] tbl_name[ (col_name, ... ) ] {VALUES | VALUE}({expr |default}, ... ), (...), .. ...
- MySQL 实现将一个库表里面的数据实时更新到另一个库表里面
MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...
- mysql通过event和存储过程实时更新简单Demo
今天想稍微了解一下存储过程和EVENT事件,最好的方法还是直接做一个简单的demo吧 首先可以在mysql表中创建一个users表 除了设置一些username,password等必要字段以外还要设立 ...
- WebSocket 实时更新mysql数据到页面
使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...
- sphinx通过增量索引实现近实时更新
一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...
- sphinx 增量索引 实现近实时更新
一.sphinx增量索引的设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
随机推荐
- mac 安装yarn失败
转载:https://www.jianshu.com/p/d4298239e1e4, yarn 下载一些包的时候总是报错,在控制台执行下面的语句后可以下载,具体原因尚未清楚待研究 git config ...
- Jsp与Servlet面试题
一.jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 respo ...
- Apache服务安全加固
一.账号设置 以专门的用户帐号和用户组运行 Apache 服务. 根据需要,为 Apache 服务创建用户及用户组.如果没有设置用户和组,则新建用户,并在 Apache 配置文件中进行指定. 创建 A ...
- [Java in NetBeans] Lesson 00. Getting Set-up for Learning Java
这个课程的参考视频在youtube. 主要学到的知识点有: set up needs Java SE JDK, NetBeans IDE class name should be the same l ...
- leetcode 93 复原IP地址
IP地址,分成四段,每段是0-255,按照每段的长度分别为1,2,3下一段长度分别1,2,3再下一段......进行递归遍历,能满足条件的假如res中.比较难想到的就是假如有一段是三位的010是不符合 ...
- Dockerfile详解(一)
Dockerfile 用于自动化构建一个docker镜像.Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: ...
- Appium基础(四)查找app的appActivity与appPackage
要查看appActivity需要借助日志:adb logcat>D:/log.log 前提是已经装了Android SDK 在目录D:\Program Files (x86)\android\ ...
- vue中使用elementui里的table时不被选中设置
情景:例如提现列表,转账失败后转账金额直接返回用户余额,所以当前数据不可以再次操作 直接粘贴代码: <el-table-column type="selection" wid ...
- PB窗体之间进行传递参数
例:A窗口传递给B窗口y A窗口: 定义参数名称并赋值String s_parm s_parm=username+'%'+password,然后openwithparm(w_main,s_parm) ...
- 记工作中用到的抓取oracle表结构的sql语句
以下是SQL,生成的结果中是否为主键和是否可为空,是不准确的 ,没有关联相关的系统表: select '' as 业务源系统, t2.TABLE_NAME 表名称, nvl(t3.comments,' ...