Java通过clickhouse-client导出csv,百万数据3s内导出

createh55个月前 (12-08)技术教程55

最近根据一个项目需要导出大量数据,数据量大概在百万级别

数据是存在clickhouse中,最开始尝试使用excel导出百万级数据,导出速度很慢,于是调整为使用csv格式,速度较excel的速度快,但是导出速度也不是特别理想。于是使用Java调用clickhouse-client进行导出,导出速度很快,几秒钟就导出。

调用clickhouse-client的方式,实际上就是Java调用Linux命令,Java调用Linux命令的通用方法如下:

private static String getObject(String cmd) throws IOException {
	log.info("执行的命令为:" + cmd);
	String[] cmdA = {"/bin/sh","-c", cmd);
	Process process = Runtime.getRunTime().exec(cmdA);
	LineNumberReader br = new LineNumberReader(
    new InputStreamReader(process.getInputStream()));
	StringBuilder buffer = new StringBuilder();
	String line;
	while((line == br.readLine()) != null) {
		System.out.println(line);
		buffer.append(line).append("\n");
	}
	log.info("命令执行结果:" + buffer);
	return buffer.toString();
}

只需要在通用的Java调用Linux命令的方法上再封装一层,加上调用clickhouse-client即可

public static String exportClickhouseCsvCmd
(String username, String password, String sql, String filepath) {
		组装clickhouse-client的sql导出命令
		return getObject(command);
}

然后就可以在业务方法中调用该导出方法了。

这种方法调试会相对麻烦,每次需要更新到服务器上去进行测试,但是性能是最好的,大家可以根据自己项目的实际情况进行合理的取舍。

相关文章

csv 文件读写乱码问题的一个简单解决方法

你好,我是 zhenguo今天扼要总结一个处理csv文件乱码问题,可能你有类似经历,用excel打开一个csv文件,中文全部显示乱码。然后,手动用notepad++打开,修改编码为utf-8并保存后,...

Linux搭建Apache(httpd)内网访问正常,外网无法访问(精华帖)

大家好,我是「Bigder」Linux搭建Apache(httpd)后内网访问正常,外网无法访问。网上资料找了几遍,汇总后关键的就是这几步。欢迎分享给需要的你~一、验证服务本身是否正常linux命令行...

一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)

1. 前言熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手,小编也没有找到一篇完善的教学素材,所以整理本文帮大家系统掌握 MAT 分析工具。本文详细...

基于java的开源BI可视化工具——DataGear使用教程

1. 简介DataGear是一款开源免费的数据可视化分析平台,使用java语言开发,采用B/S架构,支持多种数据源接入(SQL、CSV,HTTP接口,JSON,EXCEL等),主要功能包括数据管理,数...