文章目录
- 前言
- 一、ClickHouse是什么?
- 二、使用步骤
- 1.引入ClickHouse依赖
- 2.编写查询代码
- 总结
前言
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
一、ClickHouse是什么?
ClickHouse 是俄罗斯的 Yandex / (跟 Google 一样做搜索的)开源的一套针对数据仓库场景的多维数据存储与检索工具,它通过针对性的设计力图解决海量多维度数据的查询性能问题。
二、使用步骤
1.引入ClickHouse依赖
在项目的文件中加入ClickHouse的依赖:
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.52</version>
</dependency>
2.编写查询代码
代码如下:
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 注册驱动,注意这里使用反射方式注册,需要给出全类名
Class<?> aClass = Class.forName("");
ClickHouseProperties properties = new ClickHouseProperties();
properties.setUser("default");// 用户名
properties.setPassword("******");// 密码
// 查询时间如果过长,这里设置超时时间即可解决超时的报错问题
// (300000);
// 官方提供的负载均衡方法
BalancedClickhouseDataSource dataSource = new BalancedClickhouseDataSource("jdbc:clickhouse://10.100.*.100:8123,10.100.*.101:8123,10.100.*.110:8123,10.100.*.111:8123,10.100.*.120:8123,10.100.*.121:8123/default", properties);
connection = dataSource.getConnection();
// 创建执行sql语句的statement对象
statement = connection.createStatement();
resultSet = statement.executeQuery("select login_id,toDateTime64(receive_time,3, 'Asia/Shanghai') as receive_time,total_worktime from default.ch_user_cluster where login_id = '*****' and receive_time >= toDateTime64('2021-01-24 00:00:00.000', 3, 'Asia/Shanghai')\n" +
"and receive_time < toDateTime64('2021-01-25 00:00:00.000', 3, 'Asia/Shanghai')");
// 处理结果数据,如果使用dbutils,传入一个javabean,直接可以得到一个javabean数组
while (resultSet.next()){
Bo bo = new Bo();
bo.setReceive_time(resultSet.getTimestamp("receive_time"));
bo.setTotal_worktime(resultSet.getDouble("total_worktime"));
fuelList.add(bo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关流
try {
if(resultSet != null) {
resultSet.close();
}
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
总结
这是简单的ClickHouse查询java代码的实现,本文采用的是官方提供的负载均衡方式,最好是结合Nginx使用, 只需要配置一个nginx服务,并且配置对应的clickhouse地址,对外就是nginx地址即可,其有多种负载算法,轮询、权重等方式,支持多种请求策略、自动故障转移,扩容新增节点只需要修改其配置即可。