一、介绍

cliskhouse官方地址
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

  /**
     * 功能描述: 自己定义clickhouse连接方式,测试使用
     *
     * @Param: [sql]
     * @Return: void
     * @Author: lqfeng
     * @Date: 2022/3/29 14:51
     */
    public void clickhouseTest(String sql) {
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            //创建clickhouse连接
            Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
//           获取连接
            connection = DriverManager.getConnection("jdbc:clickhouse://127.0.0.1:8123/test", "root", "root);
//            创建声明
            statement = connection.createStatement();
//            执行sql
            rs = statement.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            List<JSONObject> list = new ArrayList();
            HashSet<String> objects = new HashSet<>();
            while (rs.next()) {
                JSONObject jsonMap = new JSONObject();
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    jsonMap.put(rsmd.getColumnName(i), rs.getString(rsmd.getColumnName(i)));
                }
                list.add(jsonMap);
            }
            for (JSONObject map : list) {
                System.err.println(map);
            }
        } catch (Exception e) {
            log.info("=========clickhouse查询异常===========", e);
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }

//        Integer result = clickhouseDao.queryInt(sql);

    }

官方示例:

import com.clickhouse.jdbc.*;
import java.sql.*;
import java.util.*;

public class HelloClickHouse {
    public static void main(String[] args) throws Exception {

        String url = "jdbc:ch://<host>:<port>";
        Properties properties = new Properties();
        // properties.setProperty("ssl", "true");
        // properties.setProperty("sslmode", "NONE"); // NONE to trust all servers; STRICT for trusted only
         
        ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
        try (Connection connection = dataSource.getConnection(<username>, <password>);
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from system.tables limit 10")) {
            ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
            int columns = resultSetMetaData.getColumnCount();
            while (resultSet.next()) {
                for (int c = 1; c <= columns; c++) {
                    System.out.print(resultSetMetaData.getColumnName(c) + ":" + resultSet.getString(c) + (c < columns ? ", " : "\n"));
                }
            }
        }
    }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐