我是靠谱客的博主 精明溪流,最近开发中收集的这篇文章主要介绍clickhouse常用操作命令前言基本操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 基本操作
    • 客户端常用参数
    • 多行查询
    • 常用的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常用操作命令前言基本操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部