开发者社区> 在渝老码农> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Clickhouse-Java使用JDBC连接大批量导出(表2本地文件)

简介: Clickhouse-Java使用JDBC连接大批量导出(表2本地文件);测试数据:212w,耗时28秒;测试数据:4814w,耗时380秒约6.3分钟
+关注继续查看

依赖配置pom.xml

<dependency>
    <groupId>cc.blynk.clickhouse</groupId>
    <artifactId>clickhouse4j</artifactId>
    <version>1.4.4</version>
</dependency>

CK基本信息

String driver = "cc.blynk.clickhouse.ClickHouseDriver";
String ip = "xxx.xxx.xxx.xxx";
String port = "8123";
String db = "db";
String user = "user";
String pwd = "pwd";
// 数据输出文件
String fileName = "/data/table1_cols123_20211125.txt.gz";

创建ClickHouse连接

Class.forName(driver);
StringBuffer urlSb = new StringBuffer()
        .append("jdbc:clickhouse://")
        .append(ip).append(":").append(port).append("/").append(db)
        .append("?characterEncoding=utf8&useSSL=false");
Connection connection = DriverManager.getConnection(urlSb.toString(), user, pwd);
CopyManager copyManager = CopyManagerFactory.create(connection);

数据导出模式

String query = new StringBuilder()
        .append("select col1,col2,col3 from db.table1 where col4='data4' group by col1,col2,col3")
        .append(" FORMAT TabSeparated")
        .toString();

(1)输出gz文件,每行数据根据table键分割
(2)可以根据表条件过滤、可以根据某些字段分组、并只输出指定列
(3)语句SQL全量groupby可能内存不够用;语句需要在clickhouse执行一次

输出gz文件流

OutputStream outputStream = new GZIPOutputStream(new FileOutputStream(new File(fileName)));
copyManager.copyFromDb(query, outputStream);
outputStream.flush();

关闭相关连接

if(outputStream != null) outputStream.close();
if(copyManager != null) copyManager.close();
if(connection != null) connection.close();

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Clickhouse-Java使用JDBC连接大批量导入(本地文件2表)
Clickhouse-Java使用JDBC连接大批量导入(本地文件2表); 导入:4856w耗时294秒约5分钟;导入:212w耗时12秒。
1251 0
Java——JDBC连接数据库(步骤详解!!!)
Java——JDBC连接数据库(步骤详解!!!)
179 0
JAVA中jdbc连接数据库 sql注入与PrepareStatement预处理
JAVA中jdbc连接数据库 sql注入与PrepareStatement预处理
46 0
Java jdbc连接数据库 INSERT插入
Java jdbc连接数据库 INSERT插入 package com.edu; import java.
2808 0
Java JDBC连接数据库
桥连:sun.jdbc.odbc.JdbcOdbcDriver 连接字符串:("jdbc:odbc:数据源名","sa","sa"); 纯Java驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver 连接字符串: ("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名","
1616 0
Java SSH框架系列:用户登录模块的设计与实现思路
时间 2014-01-19 16:14:54  CSDN博客原文  http://blog.csdn.net/nupt123456789/article/details/18504615 1.简介 用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等。
1346 0
java线程的实现
一共有两种方法Thread类和Runnable接口,相对来讲,更趋向于用Runnable因为一个类可以实现多个接口,但是只能继承一个类,所以相对来说倾向用Runnable   第一种方法:用Thread其实就是对父类Thread的继承和重写里面的方法基本的思路还是java的继承多态思想首先就是自...
649 0
一种拼音分词器的JAVA实现
搜索中的分词器有很多种,包括中文、英文,一般的网站都会有站内搜索功能,也就是对用户输入的内容进行处理,本文对中文的全拼实现了一 个分词器,原理很简单,就是模式匹配。
528 0
+关注
在渝老码农
我想简单了,还是他想复杂了?
62
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载