一、介绍
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

服务器环境下,也可采用如下方式:

  1. 获取安装包,并上传至服务器
  2. 使用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非常方便地进行数据操作,有助于快速处理大规模数据。