mysql(49) : 大数据按分区导出数据

代码

import com.alibaba.gts.flm.base.util.Mysql8Instance;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;public class 数据导出_按分区 {// 分区字段private static List<Integer> partitions = new ArrayList<Integer>() {{add(765);add(769);add(782);add(787);add(796);}};private static Mysql8Instance m;private static Integer onCount = 10000;private static String fields;private static String table;public static void main(String[] args) throws Exception {m = new Mysql8Instance("127.0.0.1", 3306, "test", "root", "123456");m.setReturnColumnName(true);fields = "*";table = "test1";handle("test1.csv");}public static String getSql(Integer start, Integer date) {return "SELECT \n" + fields + " FROM    " + table + " where  sdate=" + date + "  limit " + start + "," + onCount;}public static void handle(String filePath) throws Exception {long currentTimeMillis = System.currentTimeMillis();File file = new File(filePath);// TODO 先删除再创建文件,避免文件有其他内容file.delete();file.createNewFile();BufferedWriter output = new BufferedWriter(new FileWriter(file, true));// true,则追加写入text文本long total = 0;boolean addTitle = false;for (Integer partition : partitions) {int start = 0;List<List<String>> rs;while ((rs = getData(m, getSql(start, partition))).size() > 1) {if (!addTitle) {addTitle = true;} else {rs.remove(0);}System.out.println("导出分区:[" + partition + "] ,limit:[" + start + "," + onCount + "]");for (List<String> r : rs) {total += r.size();String str = join(r, ",");output.write(str);output.write("\r\n");// 换行}start += onCount;}output.flush();}output.close();m.close();System.out.println("数据导出完成,总数量:" + total + ", 耗时:" + getHaoShi(System.currentTimeMillis() - currentTimeMillis));}public static List<List<String>> getData(Mysql8Instance m, String sql) {return m.query(sql);}/*** 计算耗时** @param t 毫秒* @return*/public static String getHaoShi(double t) {double d7 = t / 1000.0 / 60 / 60 / 24 / 30 / 12 / 100;if (d7 > 1) return round(d7, 1) + "纪元";double d6 = t / 1000.0 / 60 / 60 / 24 / 30 / 12;if (d6 > 1) return round(d6, 1) + "年";double d5 = t / 1000.0 / 60 / 60 / 24 / 30;if (d5 > 1) return round(d5, 1) + "月";double d4 = t / 1000.0 / 60 / 60 / 24;if (d4 > 1) return round(d4, 1) + "天";double d3 = t / 1000.0 / 60 / 60;if (d3 > 1) return round(d3, 1) + "小时";double d2 = t / 1000.0 / 60;if (d2 > 1) return round(d2, 1) + "分钟";double d1 = t / 1000.0;if (d1 > 1) return round(d1, 1) + "秒";return t + "毫秒";}public static String join(List<String> list, String separator) {Iterator<String> iterator = list.iterator();if (iterator == null) {return null;} else if (!iterator.hasNext()) {return "";} else {Object first = iterator.next();if (!iterator.hasNext()) {return Objects.toString(first, "");} else {StringBuilder buf = new StringBuilder(256);if (first != null) {buf.append(first);}while (iterator.hasNext()) {if (separator != null) {buf.append(separator);}Object obj = iterator.next();if (obj != null) {buf.append(obj);}}return buf.toString();}}}public static Double round(Double data, int amount) {if (data == null)return null;//利用BigDecimal来实现四舍五入.保留一位小数double result = new BigDecimal(data).setScale(amount, BigDecimal.ROUND_HALF_UP).doubleValue();//1代表保留1位小数,保留两位小数就是2,依此累推//BigDecimal.ROUND_HALF_UP 代表使用四舍五入的方式return result;}/**CREATE TABLE test.`test1` (`pkid` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`sys_create_time` datetime DEFAULT NULL COMMENT '创建时间',`sys_modify_time` datetime DEFAULT NULL COMMENT '修改时间',`lng` double DEFAULT NULL COMMENT '经度',`name` varchar(100) DEFAULT NULL COMMENT '名称',`time` bigint DEFAULT NULL COMMENT '时间',`age` varchar(100) DEFAULT NULL COMMENT '年龄',`speed` double DEFAULT NULL COMMENT '速度',`lat` double DEFAULT NULL COMMENT '维度',`sdate` int(11) NOT NULL COMMENT '小时(分区键)',PRIMARY KEY (`pkid`,`sdate`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表1';*/
}

 Mysql8Instance类如下

mysql(30) : java管理mysql8(开发用轻量版)_java mysql8-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm和x86架构服务器拉取arm64架构的docker镜像

dockerhub提供的镜像部分支持arm64架构 Docker arm架构服务器拉取docker镜像&#xff0c;默认是arm架构 # docker pull centos Using default tag: latest latest: Pulling from library/centos 52f9ef134af7: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8…

HarmonyOS布局之scroll

对于Scroll 布局官方讲解非常好&#xff0c;我在这做个总结&#xff0c;主要结合实际应用进行补充 Scroll — 首先他是一个容器布局&#xff0c;所有的容器布局都可包含子布局&#xff0c;因此scroll 布局也可包含子组件但是&#xff08;他只能包含一个子组件&#xff09;&…

nodejs微信小程序+python+PHP医院挂号系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

0基础学习VR全景平台篇第130篇:曝光三要素—感光度

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 众所周知&#xff0c;摄影是一门用光的艺术。随着天气、地点、时间的变化&#xff0c;我们所处环境的光线也随之发生改变。而在不同的环境下该如何去正确的调节曝光&#xff0c;是…

观察者模式 Observer

观察者模式属于行为型模式。在程序设计中&#xff0c;观察者模式通常由两个对象组成&#xff1a;观察者和被观察者。当被观察者状态发生改变时&#xff0c;它会通知所有的观察者对象&#xff0c;使他们能够及时做出响应。 三要素&#xff1a;观察者&#xff08;Observer&#…

Docker 学习路线:构建和优化容器镜像

容器镜像和Dockerfile 容器镜像是可执行的软件包&#xff0c;包括运行应用程序所需的所有内容&#xff1a;代码、运行时、系统工具、库和设置。通过构建自定义镜像&#xff0c;您可以在任何支持 Docker 的平台上无缝地部署应用程序及其所有依赖项。 Dockerfile 构建容器镜像…

python如何学习最为高效?

学习Python最有效的方法因人而异&#xff0c;但以下是一些建议&#xff0c;可以帮助你更高效地学习Python&#xff1a; 1.明确学习目标&#xff1a; 在开始学习之前&#xff0c;明确你的学习目标。你想要学习Python的哪些方面&#xff1f;是想要掌握基础语法、编写代码、做项目…

PyTorch加载数据以及Tensorboard的使用

一、PyTorch加载数据初认识 Dataset:提供一种方式去获取数据及其label 如何获取每一个数据及其label 总共有多少的数据 Dataloader:为后面的网络提供不同的数据形式 数据集 在编译器中导入Dataset from torch.utils.data import Dataset 可以在jupyter中查看Dataset官方文档&…

围绕天津这个城市我们可以做哪些课题选题,供大家参考

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

confluence操作手册

文章目录 快捷键插入宏插入代码块 自动为标题编号使用方法&#xff1a; 移动页面到其它目录层级下 快捷键 插入宏 英文输入法下输入{ 插入代码块 输入三个会跳出 点编辑可以调整样式 自动为标题编号 安装插件Numbered Headings 下载链接&#xff1a;https://appfire.…

Hive-分区与分桶详解(超详细)

文章目录 前言一、Hive分区1. 什么是分区2. 分区的优势3. 如何创建分区表4. 如何插入分区数据5. 如何查询分区数据6. 分区因素 二、Hive分桶1. 什么是分桶2. 分桶的优势3. 如何创建分桶表4. 如何插入分桶数据5. 如何查询分桶数据6. 分桶因素7. 分区和分桶的综合应用 总结 前言 …

CCCC第一题

假设你有两只手&#xff08;这个好像不用假设 - -&#xff01;&#xff09;&#xff0c;在你的面前有一堆的糖&#xff0c;左手拿了a颗&#xff0c;右手拿了b颗&#xff0c;请问你一共拿了多少颗糖。 输入格式: 每次输入两个整数a和b&#xff0c;代表你左手和右手拿糖的颗数&…

asp.net core自定义授权过滤器

//只有登录的用户可以访问 1.统一返回格式 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码&#xff0c;可以和http响应码一致&#xff0c;也可以不一致/// </sum…

微服务 Spring Cloud 10,如何追踪微服务调用?服务治理的常见手段

目录 一、服务追踪的作用1、优化系统瓶颈2、优化链路调用3、故障排查4、性能优化5、生成网络拓扑图4、透明传输数据 二、节点管理1、服务调用失败一般有两类原因造成&#xff1a;2、服务调用失败的解决方式&#xff1a;3、服务调用失败的具体解决方式&#xff1a; 三、负载均衡…

设计模式中的设计原则

开闭原则&#xff1a;扩展新的功能但不改变原有的程序设计。 public class test {public static void main(String[] args) {Car benz new Car("Benz");benz.driver();//我们需要扩展方法benz.driver180();} } class Car{private String name;public Car(String nam…

vue3 H5项目中实现PDF预览

是需要npm i vue-pdf-embed 安装这个插件的&#xff0c;可兼容ios/Android&#xff0c;下面是本人的使用实例 <template><div class"conten_box"><vue-pdf-embed v-if"pdfSource.url" :source"pdfSource" /></div> <…

ansible的控制语句

本章内容主要介绍 playbook 中的控制语句 使用when判断语句block-rescue判断循环语句 一个play中可以包含多个task&#xff0c;如果不想所有的task全部执行&#xff0c;可以设置只有满足某个条件才执行这个task&#xff0c;不满足条件则不执行此task。本章主要讲解when 和 blo…

typeof 和 instanceofJS数据类型(js的问题)

原始类型&#xff08;基本类型&#xff09;Undefined Null Boolean Number String引用类型&#xff08;复杂类型&#xff09;Object 1、typeof检测返回对应数据类型 console.log(typeof 123); // number console.log(typeof true); // boolean console.log(typeof "hell…

Epson爱普生手臂机器人与PC通讯 C#

一、Epson手臂配置 1.安装Epson手臂控制软件 安装Epson手臂控制软体EPSON RC+ 7.0(根据实际需求下载应用),可以去官网下载安装。 2.硬件配置 准备一台PC,用网线连接PC和EPSON手臂控制器。 3.在PC上修改IP地址 EPSON手臂默认IP(192.168.0.1),PC IP改为手臂同一网段…

XML简介 (EXtensible Markup Language)

XML简介 (EXtensible Markup Language) 可扩展标记语言 特点 XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换 作用 数据交互配置应用程序和网站Ajax基石 XML标签 XML文档内容由一系列标签元素组成 <元素名 属性名"属性值">元素内容&l…