ClickHouse的java代码实现

时间:2025-04-24 10:07:17

文章目录

  • 前言
  • 一、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地址即可,其有多种负载算法,轮询、权重等方式,支持多种请求策略、自动故障转移,扩容新增节点只需要修改其配置即可。