当前位置: 首页 > news >正文

kettle 数据库迁移 使用分页原理实现 数据库mysql

使用 kettle 9.0 

先修改配置文件:

C:\Users\xx\.kettle

新增如下配置,解决mysql 空字符串 自动转 null bug

KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y

git地址: GitHub - 2292011451/kettle_tool

第一步:

先把要迁移的表进行读取,循环查询每个表的最大数量以及页数,追加到excel

第二部:

使用java代码读取excel数据算出每个表页码

package com.hw.payment.test;import com.alibaba.excel.EasyExcel;
import org.junit.Test;
import org.springframework.beans.BeanUtils;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;public class TableTest {/*** 计算分页数据*/@Testpublic void synchronousRead() {String fileName = "D:\\software\\project\\company_project\\zhtc_pd\\db_job\\db_list.xls";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finishList<TablePageNum> list = EasyExcel.read(fileName).head(TablePageNum.class).sheet().doReadSync();//移除pagesize==0List<TablePageNum> collect = list.stream().filter(x -> x.getPageNum() != 0).collect(Collectors.toList());//正序排序List<TablePageNum> sortedPeople = collect.stream().sorted(Comparator.comparingLong(TablePageNum::getMaxNum).thenComparing(TablePageNum::getPageNum)).collect(Collectors.toList());Long sortedPeopleNum = sortedPeople.stream().map(TablePageNum::getMaxNum).reduce(0L, Long::sum);//按大小切割数据Long maxNum = 0L;List<TablePageNum> dataList = new ArrayList<>();List<List<TablePageNum>> datas = new ArrayList<>();boolean b = sortedPeople.size() == 1;if (b) {datas.add(dataList);} else {for (TablePageNum sortedPerson : sortedPeople) {maxNum += sortedPerson.getMaxNum();if (maxNum <= 7000000) {dataList.add(sortedPerson);} else if (maxNum > 7000000 && maxNum < 12000000) {dataList.add(sortedPerson);datas.add(dataList);dataList = new ArrayList<>();maxNum = 0L;} else {dataList.add(sortedPerson);datas.add(dataList);dataList = new ArrayList<>();maxNum = 0L;}}}Long maxNumNew = 0L;for (int k = 0; k < datas.size(); k++) {List<TablePageNum> tablePageNums = datas.get(k);List<TablePageNum> dataNew = new ArrayList<>();for (TablePageNum tablePageNum : tablePageNums) {maxNumNew += tablePageNum.getMaxNum();//排除定时任务等表boolean contains = true;String[] tables = {"qrtz"};for (String table : tables) {//排除表contains = tablePageNum.getTableName().contains(table);if (contains) {contains = false;break;}}if (!contains) {Integer pageNum = tablePageNum.getPageNum();Integer pageSize = tablePageNum.getPageSize();for (int i = 1; i <= pageNum; i++) {TablePageNum data = new TablePageNum();int pageNumIndex = (i - 1) * pageSize;BeanUtils.copyProperties(tablePageNum, data);data.setPageNum(pageNumIndex);dataNew.add(data);}}}String fileNameOut = "D:\\software\\project\\company_project\\zhtc_pd\\db_job\\page_data\\db_list" + k + ".xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileNameOut, TablePageNum.class).sheet("模板").doWrite(dataNew);}System.out.println(sortedPeopleNum + ":" + maxNumNew);}
}

输出页码数据

第三部:

读取页码数据循环查询数据插入到新库

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle SQL injection(SQL注入)
  • 4款AI生成PPT工具推荐,提升工作效率
  • 安卓沉浸式状态栏遇到的问题
  • 【已解决】Chrome浏览器被2024年新版流氓软件劫持,总会自动打开hao.360.com和so.com主页
  • 面试常见题之java
  • 【D3.js in Action 3 精译_022】3.2 使用 D3 完成数据准备工作
  • 和笔记相关的页面:编辑笔记和展示笔记 以及相关的viewmodel
  • C++面试模拟01
  • 三维点云处理(C++)学习记录——PDAL
  • 【git】
  • Mysql基础——DML
  • mysql Field ‘ssl_cipher‘ doesn‘t have a default value的解决
  • OpenFeign:Spring Cloud中的声明式HTTP客户端
  • 2024年汉字小达人区级自由报名备考冲刺:今年官方模拟题练一练
  • SpringSecurity 5
  • ----------
  • [PHP内核探索]PHP中的哈希表
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • js写一个简单的选项卡
  • k8s如何管理Pod
  • Laravel5.4 Queues队列学习
  • nodejs实现webservice问题总结
  • orm2 中文文档 3.1 模型属性
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Vue2.0 实现互斥
  • XForms - 更强大的Form
  • 笨办法学C 练习34:动态数组
  • 聊聊sentinel的DegradeSlot
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何选择开源的机器学习框架?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 智能合约开发环境搭建及Hello World合约
  • 走向全栈之MongoDB的使用
  • #14vue3生成表单并跳转到外部地址的方式
  • #if 1...#endif
  • #NOIP 2014# day.1 T2 联合权值
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.ajax()参数及用法
  • (¥1011)-(一千零一拾一元整)输出
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (笔记)M1使用hombrew安装qemu
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)大道至简,职场上做人做事做管理
  • (转载)Linux网络编程入门
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 中的轻量级线程安全
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)