一、介绍
cliskhouse官方地址(https://clickhouse.com/)
ClickHouse 是一个真正的面向列的 数据库管理系统 (DBMS),用于查询的在线分析处理 (OLAP)。
数据按列存储,并且在执行数组(向量或列块)期间存储。只要有可能,操作就会被发送到数组上,而不是单个值上。它被称为“向量化查询执行”,它有助于降低实际数据处理的成本。
二、安装
注意:
ClickHouse 可以在任何具有 x86_64、AArch64 或 PowerPC64LE CPU 架构的 Linux、FreeBSD 或 Mac OS X 上运行
1、下载
在本地下载 ClickHouse 最简单的方法是运行以下命令。如果您的操作系统受支持,则会下载相应的 ClickHouse 二进制文件并使其可执行:
curl https://clickhouse.com/ | sh
服务器环境下,也可采用如下方式:
- 获取安装包,并上传至服务器
- 使用root用户登录后,执行sh 文件名进行安装,等待出现ClickHouse Install Complete! 即表示安装完成
2、启动
./clickhouse server
3、查看及操作
详细sql文档,可以移步官方
ClickHouse 服务启动命令 : systemctl start clickhouse-server
ClickHouse 服务停止命令 : systemctl stop clickhouse-server
ClickHouse 服务重启命令 : systemctl restart clickhouse-server
查看ClickHouse 服务状态命令 : systemctl status clickhouse-server
三、在Java中使用
1、如果是maven项目,可以在pom中添加坐标
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.2.6</version>
</dependency>
或者下载好jar 包,add to libraries
2、连接clickhouse
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ClickhouseConnection {
public static void main(String[] args) {
String url = "jdbc:clickhouse://localhost:8123/default";
String user = "default";
String password = "";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3创建表
连接到clickhouse后,可以使用SQL语句创建表。clickhouse支持的数据类型非常丰富,需要根据具体需求选择合适的数据类型。以下是一个创建表的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTable {
public static void main(String[] args) {
String url = "jdbc:clickhouse://localhost:8123/default";
String user = "default";
String password = "";
String sql = "CREATE TABLE test_table (id Int32, name String, age Int32) ENGINE = MergeTree() ORDER BY id";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
stmt.executeUpdate(sql);
System.out.println("表创建成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码创建了一个名为test_table的表,包含三个字段:id、name和age。其中id和age的数据类型为Int32,name的数据类型为String。表创建使用了MergeTree引擎,并以id字段为排序键。如果表创建成功,将输出“表创建成功”。
4.建立表的索引
在clickhouse中,可以使用索引对数据进行快速查找,提高查询效率。以下是一个为表创建索引的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateIndex {
public static void main(String[] args) {
String url = "jdbc:clickhouse://localhost:8123/default";
String user = "default";
String password = "";
String sql = "CREATE INDEX index_name ON test_table (name) TYPE bloom_filter";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
stmt.executeUpdate(sql);
System.out.println("索引创建成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码为test_table表的name字段创建了一个名为index_name的布隆过滤器索引。如果索引创建成功,将输出“索引创建成功”。
5、向表中插入数据
表创建和索引创建完成后,可以向表中插入数据。以下是一个向表中插入数据的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertData {
public static void main(String[] args) {
String url = "jdbc:clickhouse://localhost:8123/default";
String user = "default";
String password = "";
String sql = "INSERT INTO test_table (id, name, age) VALUES (?, ?, ?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, 1);
ps.setString(2, "张三");
ps.setInt(3, 18);
ps.executeUpdate();
ps.setInt(1, 2);
ps.setString(2, "李四");
ps.setInt(3, 20);
ps.executeUpdate();
System.out.println("数据插入成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码向test_table表中插入两条数据,分别为id为1的张三和id为2的李四。如果数据插入成功,将输出“数据插入成功”。
6、查询数据
最后,使用SELECT语句查询表中数据。以下是一个查询表数据的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class QueryData {
public static void main(String[] args) {
String url = "jdbc:clickhouse://localhost:8123/default";
String user = "default";
String password = "";
String sql = "SELECT * FROM test_table";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t" + rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码查询test_table表中的数据,并按照id、name、age的顺序输出结果。如果查询成功,将输出查询结果。
总结
本文介绍了如何使用java连接到clickhouse,并实现表创建、索引创建、数据插入和数据查询等操作。在clickhouse中,使用JDBC API非常方便地进行数据操作,有助于快速处理大规模数据。