概述
文章目录
- 前言
- 基本操作
- 客户端常用参数
- 多行查询
- 常用的sql语法
- 导入csv数据
- 导入数据时忽略错误
- 导出csv数据
- 删除分区
- 查看表大小
- 执行sql文件
- 查看分区信息
- 查看后台进程
- 杀死后台进程
前言
在日常使用clickhouse中,会用到很多命令,特此整理记录一下。以下大部分内容都来自clickhouse_中文文档.pdf。
文档链接:https://pan.baidu.com/s/1Ai33BE6jClIs9kMDElv5Yg 提取码:pp7h
基本操作
在我们日常使用clickhouse中,用的最多的应该就是客户端相关的一些操作了,以下就是客户端的一些基本用法。
客户端常用参数
--host, -h -– 服务端的 host 名称, 默认是 'localhost'。 您可以选择使⽤ host 名称或者 IPv4 或 IPv6 地址。
--port – 连接的端⼝,默认值: 9000。注意 HTTP 接⼝以及 TCP 原⽣接⼝是使⽤不同端⼝的。
--user, -u – ⽤户名。 默认值: default。
--password – 密码。 默认值: 空字符串。
--query, -q – ⾮交互模式下的查询语句.
--database, -d – 默认当前操作的数据库. 默认值: 服务端默认的配置 (默认是 default )。
--multiline, -m – 如果指定,允许多⾏语句查询(Enter 仅代表换⾏,不代表查询语句完结)。
--multiquery, -n – 如果指定, 允许处理⽤逗号分隔的多个查询,只在⾮交互模式下⽣效。
--format, -f – 使⽤指定的默认格式输出结果。
--vertical, -E – 如果指定,默认情况下使⽤垂直格式输出结果。这与 '--format=Vertical' 相同。在这种格式中,每个值都在单独的⾏上打印,这种⽅式对显示宽表很有帮助。
--time, -t – 如果指定,⾮交互模式下会打印查询执⾏的时间到 'stderr' 中。
--stacktrace – 如果指定,如果出现异常,会打印堆栈跟踪信息。
-config-file – 配置⽂件的名称。
```
## 客户端登录
```bash
clickhouse-client --user xxxx --password xxxx
clickhouse-client -u xxxx --password xxxx
多行查询
clickhouse-client -m
clickhouse-client --multiline
如果 multiline 没有指定(默认没指定):为了执⾏查询,按下 Enter 即可。查询语句不是必须使⽤分号结尾。如果需要写 ⼀个多⾏的查询语句,可以在换⾏之前输⼊⼀个反斜杠 ,然后在您按下 Enter 键后,您就可以输⼊当前语句的下⼀⾏查询 了。
如果 multiline 指定了:为了执⾏查询,需要以分号结尾并且按下 Enter 键。如果⾏末没有分号,将认为当前语句并没有输 ⼊完⽽要求继续输⼊下⼀⾏。 若只运⾏单个查询,分号后⾯的所有内容都会被忽略。
可以指定 G 来替代分号或者在分号后⾯,这表示 Vertical 的格式。在这种格式下,每⼀个值都会打印在不同的⾏中,这 种⽅式对于宽表来说很⽅便。这个不常⻅的特性是为了兼容 MySQL 命令⽽加的。
常用的sql语法
-- 列出数据库列表
show databases
-- 查看当前使用的数据库
select currentDatabase()
-- 列出数据库中表列表
show tables
-- 创建数据库
create database test
-- 创建一个表(建表的时候指定数据类型,建表的时候一定要指定表引擎,要么使用-m,要么使用反斜杠,不然不能写多行)
create table if not exists test.t1 (
id UInt16,name String
) ENGINE = Memory;
-- 查看表结构
desc test.t1
-- 删除一个表
drop table if exists test.t1
-- 删除一个库
drop database test
-- 清空数据
truncate table test.t1
-- 插入测试数据
insert into test.t1 (id, name) values (1, 'zhangsan'), (2, 'lishi')
-- 查询
select * from test.t1
-- 重命名表
rename table tab1 to tab2
--添加列
alter table tbl add column cost UInt32 default 0;
导入csv数据
cat xxx.csv | clickhouse-client --query="insert into tablename format CSV"
指定分隔符:cat xxx.csv | clickhouse-client --format_csv_delimiter="|" --query="insert into tablename format CSV"
如果csv文件有列名,使用CSVWithNames,解析时,第一行会被直接忽略。
注意:query后面的=不能有空格
导入数据时忽略错误
clickhouse-client --input_format_allow_errors_num=100000 --input_format_allow_errors_ratio=0.2
--input_format_allow_errors_num : 是允许的错误数
--input_format_allow_errors_ratio : 是允许的错误率, 范围是 [0-1]
导出csv数据
clickhouse-client --query="select * from test.t1 format CSV" > test.csv
删除分区
alter table xxx drop partition '2018-08-08';
默认情况下, Clickhouse 不允许删除分区或表的大小大于 50GB 的分区或表. 可以通过修改server的配置文件来永久配置. 也可以临时设置一下来删除而不用重启服务.
永久配置:更改config.xml配置文件
<!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
<!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->
0表示不限制. 或者你可以设置为你想限制的最大的大小。
查看表大小
SELECT
database,
table,
formatReadableSize(size) AS size,
formatReadableSize(bytes_on_disk) AS bytes_on_disk,
formatReadableSize(data_uncompressed_bytes) AS data_uncompressed_bytes,
formatReadableSize(data_compressed_bytes) AS data_compressed_bytes,
compress_rate,
rows,
days,
formatReadableSize(avgDaySize) AS avgDaySize
FROM
(
SELECT
database,
table,
sum(bytes) AS size,
sum(rows) AS rows,
min(min_date) AS min_date,
max(max_date) AS max_date,
sum(bytes_on_disk) AS bytes_on_disk,
sum(data_uncompressed_bytes) AS data_uncompressed_bytes,
sum(data_compressed_bytes) AS data_compressed_bytes,
(data_compressed_bytes / data_uncompressed_bytes) * 100 AS compress_rate,
max_date - min_date AS days,
size / (max_date - min_date) AS avgDaySize
FROM system.parts
WHERE active
GROUP BY
database,
table
ORDER BY
database ASC,
size DESC
)
执行sql文件
clickhouse-client --user xxx --password xxx --multiquery < /root/temp.sql
查看分区信息
select partition, name, active from system.parts WHERE table = 'visits'
查看后台进程
-- 这个命令和mysql是一样的
show processlist
-- 如果进程太多,也可用通过查询系统表 processes,
select * from system.processes
-- 指定主要关心字段
select user,query_id,query,elapsed,memory_usage from system.processes;
杀死后台进程
-- 通过上面指令获取到进程相关信息后,可以用query_id条件kill进程
KILL QUERY WHERE query_id='2e33f3ae-f7e1-4c10-af8c-af96aff20837'
-- 杀死default用户下的所有进程
KILL QUERY WHERE user='default'
只读用户只能停止他们自己的查询。
默认情况下,使用异步版本的查询(ASYNC),它不等待确认查询已停止。
同步版本(SYNC)等待所有查询停止,并在每个进程停止时显示有关该进程的信息。
响应包含kill_status列,该列有以下值:
finished –查询已成功终止。
waiting –向查询发送信号终止后,等待查询结束。
其他值说明了为什么无法停止查询。
最后
以上就是精明溪流为你收集整理的clickhouse常用操作命令前言基本操作的全部内容,希望文章能够帮你解决clickhouse常用操作命令前言基本操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复