ClickHouse¶
在这篇文章中
信息
ClickHouse 是一个高性能的列式数据库管理系统 (DBMS),专为执行 OLAP 类分析查询而设计。该 DBMS 专注于以低延迟分析海量数据,广泛应用于分析、监控、日志记录和遥测处理任务中。
ClickHouse. 核心功能¶
- 列式存储:数据按列而非行存储,这显著加快了分析查询的执行速度并减少了处理的数据量。
- 高性能:针对处理海量数据集进行了优化,得益于向量化处理和高效的 CPU 利用率,能够执行数十亿行数据的查询。
- 数据压缩:采用专门的压缩算法,可以大幅减少存储的数据量(通常比基于行的 DBMS 小几倍),特别是在分析工作负载下。
- SQL 兼容性:支持带有额外分析函数的扩展 SQL 语法,简化了现有应用的迁移。
- 分布式处理:支持创建集群以实现水平扩展并在多台服务器上处理数据。
- 数据复制:内置的复制支持确保容错性和高数据可用性。
- 支持多种数据格式:可以导入和导出 CSV、JSON、Parquet、Avro 等格式的数据。
- 物化视图:在后台自动聚合数据以加速重复查询。
- 与外部源集成:支持直接从 MySQL、PostgreSQL、MongoDB、Kafka、S3 等系统读取数据。
部署功能¶
| ID | 软件名称 | 兼容操作系统 | 虚拟机 | 物理机 | vGPU | GPU | 最低CPU(核) | 最低内存(GB) | 最低硬盘(GB) | 自定义域名 | 是否启用 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 492 | ClickHouse | Ubuntu 24.04, Ubuntu 22.04 | + | + | + | + | 4 | 8 | 120 | 否 | 订购 |
-
已安装的软件:
- ClickHouse Server >= 26.1.1
- ClickHouse Client >= 26.1.1
-
安装细节:
- 通过官方开发者脚本安装软件;
- 安装时间:5-10 分钟;
- 数据库可通过各种 SQL 客户端进行网络连接;
- 默认使用用户
default,密码与root账户的密码相同。
配置文件和数据文件位置:
- 主服务器配置:
/etc/clickhouse-server/config.xml - 用户设置:
/etc/clickhouse-server/users.xml - 服务器日志:
/var/log/clickhouse-server/clickhouse-server.log/var/log/clickhouse-server/clickhouse-server.err.log
- 数据:
/var/lib/clickhouse/ - PID 文件:
/run/clickhouse-server/clickhouse-server.pid - 系统限制:
/etc/security/limits.d/clickhouse.conf
可用的连接端口:
| 端口 | 协议 | 用途 | 状态 | 客户端/用途 |
|---|---|---|---|---|
| 8123 | HTTP | HTTP 接口 | 活跃 | DBeaver, DataGrip, Tableau, Web 界面, JDBC/ODBC |
| 9000 | TCP Native | ClickHouse 原生协议 | 活跃 | clickhouse-client, Python/Go 驱动程序 |
| 9004 | MySQL | MySQL 协议模拟 | 活跃 | MySQL Workbench, mysql 客户端 |
| 9005 | PostgreSQL | PostgreSQL 协议模拟 | 活跃 | pgAdmin, psql 客户端 |
| 9009 | Interserver HTTP | 服务器间复制 | 活跃 | 集群内通信 |
| 8443 | HTTPS | 带 SSL 的 HTTP 接口 | 可选 | 需要配置 SSL 证书 |
| 9100 | gRPC | gRPC 接口 | 可选 | gRPC 客户端 |
备注
端口 8443 和 9100 默认禁用,需要在 /etc/clickhouse-server/config.xml 中进行额外配置。
备注
除非另有说明,我们安装的是来自官方开发者网站的软件最新发行版。
部署 ClickHouse 后的入门指南¶
支付订单后,系统将向注册时指定的电子邮件发送通知,告知服务器已准备好工作。邮件中将包含 VPS 的 IP 地址以及连接所需的登录名和密码。我司客户可通过服务器硬件和 API 控制面板 - Invapi 管理硬件。
授权详情:
- 服务器 IP 地址:在电子邮件和控制面板中提供;
- 登录名:
default; - 密码:与
root账户的密码相同,并发送至电子邮件地址。
重要
对于 GUI 客户端(DBeaver、DataGrip 等),请使用 端口 8123 (HTTP 接口)。端口 9000 仅保留给原生的 clickhouse-client 使用。
连接到 ClickHouse¶
连接方法
本节描述了通过 clickhouse-client (命令行客户端) 和 DBeaver (图形界面) 连接到 ClickHouse 的最常见方式。ClickHouse 还支持通过其他客户端连接:DataGrip、Tableau、MySQL Workbench (通过端口 9004)、pgAdmin (通过端口 9005),以及 Python、Go、Java 等语言的编程库。
通过 clickhouse-client 连接¶
ClickHouse 包含一个用于数据库操作的原生命令行客户端。
1. 从服务器连接 (本地):
2. 从远程机器连接:
3. 执行简单查询:
4. 查看数据库列表:
通过 DBeaver 连接¶
DBeaver 是一个通用的 GUI 客户端,用于处理各种数据库,包括 ClickHouse。
1. 安装 DBeaver
从 官方网站 下载并安装 DBeaver。
2. 创建新连接
- 启动 DBeaver
- 选择 Database >> New Database Connection (或按
Ctrl+Shift+N)

- 在数据库列表中找到并选择 ClickHouse

- 点击
Next
3. 配置连接参数
在设置窗口中指定以下参数:
Host: <您的服务器 IP 地址>
Port: 8123
Database/Schema: (留空或指定 default)
Username: default
Password: <root_password>

至关重要
对于 DBeaver 连接,请使用 端口 8123。
4. 下载 JDBC 驱动程序
首次连接时,DBeaver 会提示您下载 ClickHouse 的 JDBC 驱动程序:
- 在弹出窗口中点击
Download:

- 等待驱动程序下载完成:

- 点击
OK
5. 测试连接
- 点击
Test Connection; - 如果配置正确,将出现消息:Connected (XXX ms):

- 消息将包括:
- Server: ClickHouse X.X.X.XXX
- Driver: ClickHouse JDBC Driver X.X.X
6. 完成设置
- 点击
Finish; - 连接将出现在数据库导航器中;
- 展开连接树以查看数据库、表和其他对象。

常见问题:
| 错误 | 原因 | 解决方法 |
|---|---|---|
transport error: 400 | 使用了端口 9000 而不是 8123 | 更改为端口 8123 |
Connection refused | IP 错误或防火墙阻止了端口 | 验证 IP 地址和防火墙规则 |
Authentication failed | 登录名或密码错误 | 验证凭据 |
Hostname is not specified | 在未配置的情况下意外启用了 SSH 隧道 | 在连接设置中关闭 SSH 选项卡 |
ClickHouse 中的核心操作¶
创建数据库¶
创建表¶
CREATE TABLE my_database.events
(
event_date Date,
event_time DateTime,
user_id UInt32,
event_type String,
value Float64
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, user_id);
插入数据¶
INSERT INTO my_database.events VALUES
('2024-12-25', '2024-12-25 10:00:00', 1, 'click', 1.5),
('2024-12-25', '2024-12-25 10:05:00', 2, 'view', 2.3),
('2024-12-25', '2024-12-25 10:10:00', 1, 'purchase', 99.99);
选择数据¶
简单查询:
聚合数据:
SELECT
event_type,
count() as events_count,
avg(value) as avg_value
FROM my_database.events
WHERE event_date = '2024-12-25'
GROUP BY event_type;
时间序列:
SELECT
toStartOfHour(event_time) as hour,
count() as events_per_hour
FROM my_database.events
WHERE event_date >= '2024-12-01'
GROUP BY hour
ORDER BY hour;
从 CSV 导入数据¶
创建表:
CREATE TABLE my_database.logs
(
timestamp DateTime,
level String,
message String
)
ENGINE = MergeTree()
ORDER BY timestamp;
导入数据:
管理用户和权限¶
创建用户:
授予权限:
查看用户:
查看权限:
管理服务¶
启动服务:
停止服务:
重启服务:
服务状态:
查看日志:
备注
如果您不是以 root 身份操作,请在命令前加上 sudo:sudo clickhouse start
检查活动端口¶
查看 ClickHouse 正在监听的端口:
或者更详细地:
检查配置中配置的端口:
检查特定端口:
预期的端口检查输出:
LISTEN *:8123 clickhouse-serv (HTTP)
LISTEN *:9000 clickhouse-serv (Native TCP)
LISTEN *:9004 clickhouse-serv (MySQL)
LISTEN *:9005 clickhouse-serv (PostgreSQL)
LISTEN *:9009 clickhouse-serv (Interserver)
备注
有关 ClickHouse 配置和优化的详细信息,请参阅 官方开发者文档。