📅 2025年2月11日
📦 ck
版本 25.1.3.23
🏆 Clickhouse 的基础使用
1️⃣ 安装 ClickHouse
在安装之前需要准备一个 linux
系统,可以使用云服务器、虚拟机或者 wsl
等,我这里选择是 wsl
的 ubuntu
系统
可以查看本篇博客了解wsl:https://blog.tanc.fun:9999/archives/6fc7fa3e-0327-434f-ab41-c1f955a7de3b#Wsl
随后可以直接参照官网简单粗暴的来安装
🏢 官网地址: https://clickhouse.com/docs/zh/getting-started/install#deb%E5%AE%89%E8%A3%85%E5%8C%85
# 安装必要的工具和库,以支持从HTTPS源安装软件
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
# 添加ClickHouse的GPG密钥,用于验证软件包的来源
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
# 将ClickHouse的软件源添加到系统的APT源列表中
# 注意:这里的URL是ClickHouse的软件包仓库地址,但由于网络原因,可能无法正常解析
# 如果无法访问,请检查URL的合法性或尝试其他网络环境
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
# 更新APT的软件包索引,以便能够找到新添加的ClickHouse软件源中的软件包
sudo apt-get update
# 安装ClickHouse的服务器端和客户端软件包
sudo apt-get install -y clickhouse-server clickhouse-client
# 启动ClickHouse服务器服务
sudo service clickhouse-server start
# 使用ClickHouse客户端工具连接到服务器
# 如果设置了密码,可以使用 "clickhouse-client --password" 并输入密码
clickhouse-client
按照如上步骤 ClickHouse
就安装好了,在安装过程中会提升你输入密码,随后就可以通过 clickhouse-client
命令行进入了
⭐️ 目录结构
🅾️ 核心部分
- 服务端的配置文件: 包括了全局配置
config.xml
和用户配置user.xml
root@DESKTOP-HLBQNO4:/etc/clickhouse-server# ls
config.d config.xml users.d users.xml
- 默认数据存储目录:
/var/lib/clickhouse
但是一般会修改默认路径配置,将数据保存到大容量磁盘中去 - 默认保存日志的目录:
/var/log/clikhouse-server
🅾️ 配置文件部分
- 文件的句柄数量配置: 这个配置也可以通过
config.xml
文件的max_open_files
修改
root@DESKTOP-HLBQNO4:~# cat /etc/security/limits.d/clickhouse.conf
clickhouse soft nofile 1048576
clickhouse hard nofile 1
- 用户恢复因异常中断的ck服务进程的定时任务
/etc/cron.d/clickhouse-server
(有些版本可能没有)
🅾️ 可执行文件
clickhouse
主程序可执行文件clickhouse-client
客户端链接clickhouse-server
服务端启动clickhouse-compressor
内置压缩工具,用于数据的正压反解
有意思的是,这些可执行文件都指向于 clickhouse
主程序可执行文件
root@DESKTOP-HLBQNO4:/usr/bin# ll |grep click
lrwxrwxrwx 1 root root 10 Feb 4 10:10 ch -> clickhouse*
lrwxrwxrwx 1 root root 10 Feb 4 10:10 chc -> clickhouse*
lrwxrwxrwx 1 root root 10 Feb 4 10:10 chl -> clickhouse*
-r-xr-xr-x 1 root root 562534496 Feb 4 10:10 clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-benchmark -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-client -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-compressor -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-disks -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-extract-from-config -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-format -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-git-import -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-keeper -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 10 Feb 4 10:12 clickhouse-keeper-client -> clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-keeper-converter -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-local -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-obfuscator -> /usr/bin/clickhouse*
lrwxrwxrwx 1 root root 19 Feb 10 22:13 clickhouse-server -> /usr/bin/clickhouse*
在
ClickHouse
中,/usr/bin
目录下的多个可执行文件(如ch
、chc
、chl
等)通常都是指向clickhouse
主程序的符号链接。这是因为ClickHouse
的设计理念是将多个功能集成到一个统一的代码库中,而不是为每个功能单独提供一个二进制文件。以下是具体的原因:1. 统一的代码库
ClickHouse
的核心功能和逻辑都集中在clickhouse
主程序中。通过不同的命令行参数或运行环境(如服务模式、客户端模式等),clickhouse
主程序可以切换到不同的功能模块。例如:
clickhouse-server
用于启动ClickHouse服务器。clickhouse-client
用于与ClickHouse服务器进行交互的命令行工具。clickhouse-benchmark
用于性能测试。这些功能模块实际上都是基于
clickhouse
主程序的不同调用方式实现的。
2️⃣ 使用ck
ck底层支持 tcp
和 http
,其中 tcp
性能更好,默认端口为为9000,主要用于集权间的内部通信以及 CLI
命令行;而 Http
协议则拥有更好的兼容性,可以通过RESTFUL的形式被广泛用于编程语言,客户端接口为8123。
ck的非交互执行,可以用于批量处理支持导入导出 tsv
文件或者 csv
文件,而且支持一次性执行多个文件
⭐️ 客户端命令行参数
在交互式中执行的命令行参数会在 ~/.clickhouse-client-history
文件中显示
root@DESKTOP-HLBQNO4:~# cat ~/.clickhouse-client-history
### 2025-02-11 22:47:03.615
show databases;
### 2025-02-11 22:47:12.327
use system
### 2025-02-11 22:47:16.811
show tables;
### 2025-02-11 22:51:03.435
exit
以下是 ClickHouse
客户端(clickhouse-client
)的一些重要命令行参数及其演示命令:
1. 连接相关参数
-
--host
或-h
:指定ClickHouse
服务器的主机名或IP地址。默认值是localhost
clickhouse-client --host=192.168.1.100
-
--port
:指定ClickHouse
服务器的端口号。默认值是9000
。clickhouse-client --port=9001
-
--user
或-u
:指定连接ClickHouse
服务器的用户名。默认值是default
。clickhouse-client --user=my_user
-
--password
:指定连接ClickHouse
服务器的密码。默认为空字符串。clickhouse-client --password=my_password
2. 查询相关参数
-
--query
或-q
:指定要执行的SQL查询语句。可以在命令行中直接执行查询,而无需进入交互式模式。clickhouse-client --query="SELECT * FROM my_table LIMIT 10"
-
--database
或-d
:指定默认操作的数据库名称。默认值是服务端配置的默认数据库(通常是default
)。clickhouse-client --database=my_database --query="SHOW TABLES"
-
--format
:指定查询结果的输出格式。可选项包括Pretty
(默认)、JSON
、CSV
等。clickhouse-client --query="SELECT * FROM my_table LIMIT 10" --format=JSON
3. 其他常用参数
-
--multiline
或-m
:允许多行语句查询(Enter仅代表换行,不代表查询语句完结)。clickhouse-client --multiline
在交互式模式下,可以输入多行SQL语句,最后用
;
结束。 -
--time
或-t
:在非交互模式下打印查询执行的时间到stderr中。clickhouse-client --time --query="SELECT * FROM my_table"
-
--stacktrace
:如果指定,当出现异常时会打印堆栈跟踪信息。clickhouse-client --stacktrace --query="SELECT * FROM non_existent_table"
-
--multiquery
或-n
:允许在非交互模式下执行多个查询,查询语句用分号分隔。clickhouse-client --multiquery --query="SELECT * FROM table1; SELECT * FROM table2"
4. 安全连接参数
-
--secure
:通过安全连接(TLS
/SSL
)连接到ClickHouse
服务器。clickhouse-client --secure --host=192.168.1.100 --port=9000 --query="SELECT * FROM my_table"
5. 示例命令
以下是一些综合示例,展示如何使用上述参数:
-
连接到远程服务器并执行查询:
clickhouse-client --host=192.168.1.100 --port=9001 --user=my_user --password=my_password --query="SELECT * FROM my_table LIMIT 10"
-
执行多个查询并指定输出格式为JSON:
clickhouse-client --multiquery --format=JSON --query="SELECT * FROM table1; SELECT * FROM table2"
-
通过安全连接连接到远程服务器:
clickhouse-client --secure --host=192.168.1.100 --port=9001 --query="SELECT * FROM my_table"
-
在非交互模式下打印查询执行时间:
clickhouse-client --time --query="SELECT * FROM my_table"
-
进入交互式模式并指定默认数据库:
clickhouse-client --database=my_database
⭐️ 内置工具
clickhouse-locl
clickhouse-local
可以独立运行大部分SQL查询,不需要依赖任 何 ClickHouse
的服务端程序,它可以理解成是 ClickHouse
服务的单 机版微内核,是一个轻量级的应用程序。clickhouse-local
只能够使 用 File
表引擎(关于表引擎的更多介绍在后续章节展开),它的数据 与同机运行的 ClickHouse
服务也是完全隔离的,相互之间并不能访问
clickhouse-local
是非交互式运行的,每次执行都需要指定数据 来源,例如通过 stdin
标准输入,以 echo
打印作为数据来源,注意需要使用 -e
选项解析换行符
root@DESKTOP-HLBQNO4:~# echo -e "1\n2\n3\n" | clickhouse-local -q "create table test_table (id Int64) ENGINE=File(CSV,stdin);select id from test_table"
1
2
3
0
还可以通过系统命令行来实现对内存用量的查询
ps aux | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $4) }' | clickhouse-local -S "user String, memory Float64" -q "SELECT user, round(sum(memory), 2) as memoryTotal FROM table GROUP BY user ORDER BY memoryTotal DESC FORMAT Pretty"
┏━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ user ┃ memoryTotal ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━┩
1. │ clickho+ │ 24 │
├──────────┼─────────────┤
2. │ root │ 3.3 │
├──────────┼─────────────┤
3. │ systemd+ │ 0.5 │
├──────────┼─────────────┤
4. │ tanc │ 0.4 │
├──────────┼─────────────┤
5. │ syslog │ 0.1 │
├──────────┼─────────────┤
6. │ message+ │ 0.1 │
└──────────┴─────────────┘
解析一下
学习
linux
命令可以查看博客:https://blog.tanc.fun:9999/archives/1fbd47fc-e66a-4500-acaa-ad267d810efd
https://blog.tanc.fun:9999/archives/fbd21358-695c-46fe-a79c-e618dec16b99
ps aux | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $4) }'
pa aux 查看进程
tail -n +2 查看最后几行+2
打印输出 第一行和第四行,第一行为用户第四行为内存用量
核心参数如下:
(1) -S/--structure
:表结构的简写方式,例如以下两种声明的 效果是相同的
#使用-S简写
clickhouse-local -S "id Int64"
#使用DDL
clickhouse-local -q "CREATE TABLE test_table (id Int64) ENGINE = File(CSV, stdin)"
(2)-N/--table
:表名称,默认值是 table
clickhouse-local -S "id Int64" -N "test_table" -q "SELECt id FROM test_table"
(3)-if/--input-format
:输入数据的格式,默认值是 TSV
root@DESKTOP-HLBQNO4:~# echo -e "1,2,3" | clickhouse-local -S "id Int64" --input-format "CSV" -N "test_table"
1 2 3
(4)-f/--file
:输入数据的地址,默认值是 stdin
标准输入。
(5)-q/--query
:待执行的SQL语句,多条语句之间以分号间 隔。
clickhouse-benchmark
clickhouse-benchmark
是基准测试的小工具,它可以自动运行 SQL查询,并生成相应的运行指标报告,例如执行下面的语句启动测试
root@DESKTOP-HLBQNO4:~# echo "SELECT * FROM system.numbers LIMIT 100" | clickhouse-benchmark -i 5 Loaded 1 queries --password=000000
Loaded 1 queries.
## 执行五次
Queries executed: 5.
## 指标信息
localhost:9000, queries: 5, QPS: 31.329, RPS: 3132.885, MiB/s: 0.024, result RPS: 3132.885, result MiB/s: 0.024.
## 各百分位的查询执行时间
0% 0.002 sec.
10% 0.002 sec.
20% 0.002 sec.
30% 0.002 sec.
40% 0.003 sec.
50% 0.003 sec.
60% 0.003 sec.
70% 0.003 sec.
80% 0.003 sec.
90% 0.003 sec.
95% 0.003 sec.
99% 0.003 sec.
99.9% 0.003 sec.
99.99% 0.003 sec.
可以指定多条SQL进行测试,此时需要将SQL语句定义在文件中
root@DESKTOP-HLBQNO4:/opt/ck# cat ck-muti
SELECT * FROM system.numbers LIMIT 100
SELECT * FROM system.numbers LIMIT 200
##执行
root@DESKTOP-HLBQNO4:/opt/ck# clickhouse-benchmark -i 5 --password=000000 < ./ck-muti
Loaded 2 queries.
Queries executed: 5 (250%).
localhost:9000, queries: 5, QPS: 31.276, RPS: 4378.675, MiB/s: 0.033, result RPS: 4378.675, result MiB/s: 0.033.
0% 0.002 sec.
10% 0.002 sec.
20% 0.002 sec.
30% 0.002 sec.
40% 0.002 sec.
50% 0.002 sec.
60% 0.002 sec.
70% 0.003 sec.
80% 0.003 sec.
90% 0.004 sec.
95% 0.004 sec.
99% 0.004 sec.
99.9% 0.004 sec.
99.99% 0.004 sec.
以下是 clickhouse-benchmark
命令行的参数作用及示例代码:
--query=QUERY
:指定要执行的查询语句。如果未指定,clickhouse-benchmark
会从标准输入读取查询。-c N
,--concurrency=N
:指定同时发送的查询数量(并发数)。默认值为 1。-d N
,--delay=N
:指定中间报告的时间间隔(秒)。设置为 0 可禁用报告。默认值为 1。-h HOST
,--host=HOST
:指定 ClickHouse 服务器的主机名或 IP 地址。默认值为localhost
。-p N
,--port=N
:指定 ClickHouse 服务器的端口号。默认值为 9000。-i N
,--iterations=N
:指定查询的总执行次数。默认值为 0(无限循环)。-r
,--randomize
:如果有多个查询,以随机顺序执行。-s
,--secure
:使用 TLS 安全连接。-t N
,--timelimit=N
:指定时间限制(秒)。达到时间限制时停止发送查询。默认值为 0(禁用时间限制)。--confidence=N
:指定 T 检验的置信水平。可能的值:0 (80%)、1 (90%)、2 (95%)、3 (98%)、4 (99%)、5 (99.5%)。默认值为 5。--cumulative
:打印累计数据而不是每个时间间隔的数据。--database=DATABASE_NAME
:指定 ClickHouse 数据库名称。默认值为default
。--user=USERNAME
:指定 ClickHouse 用户名。默认值为default
。--password=PSWD
:指定 ClickHouse 用户密码。默认值为空字符串。--stacktrace
:输出异常的堆栈跟踪。--stage=WORD
:指定查询处理的阶段。可能的值:complete
、fetch_columns
、with_mergeable_state
。默认值为complete
。--help
:显示帮助信息。- 单查询测试
echo "SELECT * FROM system.numbers LIMIT 10000000" | clickhouse-benchmark -i 10
- 说明:执行
SELECT * FROM system.numbers LIMIT 10000000
查询 10 次。
- 多查询测试
cat <<EOF | clickhouse-benchmark -i 5
SELECT * FROM system.numbers LIMIT 10000000
SELECT 1
EOF
- 说明:执行两个查询,每个查询执行 5 次。
- 并发测试
clickhouse-benchmark --query="SELECT * FROM system.numbers LIMIT 10000000" -c 5 -i 10
- 说明:并发执行 5 个查询,总共执行 10 次。
- 时间限制测试
clickhouse-benchmark --query="SELECT * FROM system.numbers LIMIT 10000000" -t 60
- 说明:执行查询,直到达到 60 秒的时间限制。
- 随机顺序执行查询
clickhouse-benchmark --query="SELECT * FROM system.numbers LIMIT 10000000" --query="SELECT 1" -i 10 -r
- 说明:随机顺序执行两个查询,总共执行 10 次。
- 使用
TLS
安全连接
clickhouse-benchmark --query="SELECT * FROM system.numbers LIMIT 10000000" -s --host=clickhouse-server --port=9001
- 说明:通过 TLS 安全连接到
clickhouse-server
,端口号为 9001。
- 输出
JSON
格式结果
clickhouse-benchmark --query="SELECT * FROM system.numbers LIMIT 10000000" --json=output.json
- 说明:将测试结果输出到
output.json
文件中。