欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 安装ClickHouse

安装ClickHouse

2025/12/14 8:52:52 来源:https://blog.csdn.net/qq_36120342/article/details/148709455  浏览:    关键词:安装ClickHouse

安装ClickHouse

ClickHouse是一个用于联机分析的列式数据库管理系统,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性。

文章目录

  • 安装ClickHouse
    • 目标
    • docker 部署
      • ClickHouse相关文档地址
      • 部署脚本
      • 检验
      • 连接到控制台
      • 使用DBeaver连接
    • 快速入门
      • 创建用户
      • 查询用户
      • 创建数据库(模式)
      • 设置当前模式(数据库)
      • 授予权限
      • 查看用户和权限
      • 修改密码
      • 删除用户和数据库
      • 查询数据库
      • 创建表
      • 插入数据
      • 查询您的新表
    • java客户端
      • 环境要求
      • Maven设置
      • 配置
      • 支持的数据类型
        • 处理日期、时间和时区
      • 创建连接
      • 提供凭证和设置
      • 简单语句
      • 插入

目标

  • 快速部署 ClickHouse
  • 简单测试 ClickHouse
  • jdbc 测试

docker 部署

ClickHouse相关文档地址

  • dockerhub 地址 https://hub.docker.com/_/clickhouse
  • ClickHouse 文档地址 https://clickhouse.com/docs/zh/introduction-clickhouse
  • ClickHouse github地址https://github.com/ClickHouse/ClickHouse

部署脚本

mkdir -p /home/clickhouse
cd /home/clickhouse
cat > /home/clickhouse/docker-compose.yml << EOF
version: '3'
services:clickhouse:image: clickhouse:25.4.2.31ulimits:nofile:soft: 262144hard: 262144restart: alwayshostname: clickhousecontainer_name: clickhouseprivileged: trueenvironment:- CLICKHOUSE_DB=test- CLICKHOUSE_USER=root- CLICKHOUSE_PASSWORD=123456- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1- TZ=Asia/Shanghaiports:- '18123:8123'- '19000:9000'volumes:- /home/clickhouse/ch_data:/var/lib/clickhouse- /home/clickhouse/ch_logs:/var/log/clickhouse-serverEOF
docker-compose up -d

参数解释:

  • -p 18123:8123:将主机的 8123 端口映射到容器内的 18123 端口,用于访问 ClickHouse 的 HTTP 查询服务。
  • –ulimit nofile=262144:262144:设置容器内 ClickHouse 进程的文件打开数量限制,防止因文件描述符不足导致问题。
  • -e CLICKHOUSE_DB=test:设置 ClickHouse 的默认数据库名为 test。
  • -e CLICKHOUSE_USER=root:设置 ClickHouse 的默认管理员用户名为 root。
  • -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1:启用 ClickHouse 的访问控制功能,需要设置管理员账号密码才能进行操作。
  • -e TZ=Asia/Shanghai:设置容器的时区为上海时间,便于处理时间相关的数据。
  • -e CLICKHOUSE_PASSWORD=123456:设置 ClickHouse 的管理员账号密码为 123456。
  • 容器内配置文件路径/etc/ClickHouse-server/config.xml

检验

echo 'SELECT version()' | curl 'http://localhost:18123/?password=123456' --data-binary @-

在这里插入图片描述

连接到控制台

浏览器访问

http://ip:18123/play

在这里插入图片描述

测试

在这里插入图片描述

使用DBeaver连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

连接成功!

快速入门

创建用户

在 ClickHouse 中,你可以使用 CREATE USER 语句来创建一个新用户。例如,创建一个名为 example_user 的用户,并设置密码为 password123

CREATE USER example_user IDENTIFIED WITH plaintext_password BY 'password123';

这里,plaintext_password 是用于密码加密的算法,你也可以使用其他算法如 sha256_password

查询用户

用户列表:SELECT * FROM system.users;
角色权限:SELECT * FROM system.grants WHERE role_name = 'read_write';
关联关系:SELECT * FROM system.role_grants;

在这里插入图片描述

创建数据库(模式)

在 ClickHouse 中,你可以使用 CREATE DATABASE 语句来创建一个新的数据库。例如,创建一个名为 example_db 的数据库:

CREATE DATABASE example_db;

设置当前模式(数据库)

在 ClickHouse 中,你可以使用 USE 语句来设置当前操作的数据库。例如,要切换到 example_db 数据库:

USE example_db;

这样,之后你创建的表、执行的操作等都会默认在当前数据库 example_db 下进行。

授予权限

为了确保用户可以访问特定的数据库或表,你需要授予相应的权限。例如,授予 example_user 用户对 example_db 数据库的访问权限:

GRANT ALL ON example_db.* TO example_user;

这行命令授予了 example_userexample_db 数据库中所有表的全部权限。

查看用户和权限

你可以使用 SHOW USERS; 来查看所有用户,使用 SHOW GRANTS FOR example_user; 来查看特定用户的权限。

修改密码

如果需要修改用户的密码,可以使用以下命令:

ALTER USER example_user IDENTIFIED WITH 'plaintext' BY 'new_password123';

删除用户和数据库

如果你需要删除用户或数据库,可以使用以下命令:

  • 删除用户:

    DROP USER example_user;
    
  • 删除数据库:

    DROP DATABASE example_db;
    

查询数据库

show databases;

创建表

使用 CREATE TABLE 定义新表。在 ClickHouse 中,典型的 SQL DDL 命令同样适用,唯一的补充是 ClickHouse 中的表需要一个 ENGINE 子句。使用 MergeTree 利用 ClickHouse 的性能优势:

CREATE TABLE my_first_table
(user_id UInt32,message String,timestamp DateTime,metric Float32
)
ENGINE = MergeTree
PRIMARY KEY (user_id, timestamp);

插入数据

您可以在 ClickHouse 中使用熟悉的 INSERT INTO TABLE 命令,但重要的是要理解,每次插入 MergeTree 表时,ClickHouse 会在存储中创建一个我们称之为 part 的部分。这些部分稍后会在后台由 ClickHouse 合并。

在 ClickHouse 中,我们尽量批量插入大量行(一次数以万计或甚至数百万计),以减少后台合并所需的 parts 数量。

在本指南中,我们暂时不担心这个问题。运行以下命令,将几行数据插入到您的表中:

INSERT INTO my_first_table (user_id, message, timestamp, metric) VALUES(101, 'Hello, ClickHouse!',                                 now(),       -1.0    ),(102, 'Insert a lot of rows per batch',                     yesterday(), 1.41421 ),(102, 'Sort your data based on your commonly-used queries', today(),     2.718   ),(101, 'Granules are the smallest chunks of data read',      now() + 5,   3.14159 )

查询您的新表

您可以像使用任何 SQL 数据库一样编写 SELECT 查询:

SELECT *
FROM my_first_table
ORDER BY timestamp

注意响应以漂亮的表格格式返回:
在这里插入图片描述

java客户端

clickhouse jdbc 文档介绍

环境要求

  • OpenJDK 版本 >= 8

Maven设置

<!-- https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc -->
<dependency><groupId>com.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.8.5</version>  
</dependency>

配置

驱动类: com.clickhouse.jdbc.ClickHouseDriver

URL 语法: jdbc:(ch|clickhouse)[:<protocol>]://endpoint1[,endpoint2,...][/<database>][?param1=value1¶m2=value2][#tag1,tag2,...],例如:

  • jdbc:clickhouse:http://localhost:8123
  • jdbc:clickhouse:https://localhost:8443?ssl=true

连接属性:

除了标准 JDBC 属性外,驱动程序还支持由底层 java client 提供的 ClickHouse 特定属性。如果功能不被支持,尽可能的方法将返回 SQLFeatureNotSupportedException。其他自定义属性包括:

属性默认描述
disable_frameworks_detectiontrue禁用用户代理的框架检测
jdbc_ignore_unsupported_valuesfalse抑制 SQLFeatureNotSupportedException
clickhouse.jdbc.v1false使用旧的 JDBC 实现,而不是新的 JDBC
default_query_settingsnull允许在查询操作中传递默认的查询设置

支持的数据类型

JDBC 驱动程序支持与底层 java client 相同的数据格式。

处理日期、时间和时区

java.sql.Datejava.sql.Timejava.sql.Timestamp 可能会使时区计算复杂 - 尽管它们当然受到支持,您可能希望考虑使用 java.time 包。ZonedDateTimeOffsetDateTime 都是 java.sql.Timestampjava.sql.Datejava.sql.Time 的极好替代品。

创建连接

String url = "jdbc:ch://my-server:8123/system";Properties properties = new Properties();
DataSource dataSource = new DataSource(url, properties);//DataSource 或 DriverManager 是主要的入口点
try (Connection conn = dataSource.getConnection()) {
... // 使用连接做一些事情

提供凭证和设置

String url = "jdbc:ch://localhost:8123?jdbc_ignore_unsupported_values=true&socket_timeout=10";Properties info = new Properties();
info.put("user", "default");
info.put("password", "password");
info.put("database", "some_db");//使用 DataSource 创建连接
DataSource dataSource = new DataSource(url, info);
try (Connection conn = dataSource.getConnection()) {
... // 使用连接做一些事情
}// 使用 DriverManager 的备用方法
try (Connection conn = DriverManager.getConnection(url, info)) {
... // 使用连接做一些事情
}

简单语句

try (Connection conn = dataSource.getConnection(...);Statement stmt = conn.createStatement()) {ResultSet rs = stmt.executeQuery("select * from numbers(50000)");while(rs.next()) {// ...}
}

插入

try (PreparedStatement ps = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)")) {ps.setString(1, "test"); // idps.setObject(2, LocalDateTime.now()); // timestampps.addBatch();...ps.executeBatch(); // 将所有数据流式传输到 ClickHouse
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com