Skip to content

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. 从服务器连接 (本地):

clickhouse-client

2. 从远程机器连接:

clickhouse-client --host <IP-address> --port 9000 --user default --password <password>

3. 执行简单查询:

SELECT version();

4. 查看数据库列表:

SHOW DATABASES;

通过 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 DATABASE IF NOT EXISTS my_database;

创建表

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 * FROM my_database.events LIMIT 10;

聚合数据:

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;

导入数据:

INSERT INTO my_database.logs
FROM INFILE '/path/to/file.csv'
FORMAT CSV;

管理用户和权限

创建用户:

CREATE USER analyst IDENTIFIED BY 'secure_password';

授予权限:

GRANT SELECT ON my_database.* TO analyst;

查看用户:

SHOW USERS;

查看权限:

SHOW GRANTS FOR analyst;

管理服务

启动服务:

clickhouse start

停止服务:

clickhouse stop

重启服务:

clickhouse restart

服务状态:

clickhouse status

查看日志:

tail -f /var/log/clickhouse-server/clickhouse-server.log

备注

如果您不是以 root 身份操作,请在命令前加上 sudosudo clickhouse start

检查活动端口

查看 ClickHouse 正在监听的端口:

ss -tlnp | grep clickhouse

或者更详细地:

ss -tlnp | grep $(pidof clickhouse-server)

检查配置中配置的端口:

cat /etc/clickhouse-server/config.xml | grep -E "port>" | head -20

检查特定端口:

ss -tlnp | grep :8123

预期的端口检查输出:

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 配置和优化的详细信息,请参阅 官方开发者文档

订购带有 ClickHouse 的服务器

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×