clickhouse 超详细常用命令(零基础也能直接上手的指令说明)

主题

在clickhouse中有一些常用的基础命令,这里进行记录总结一下。

clickhouse的安装可以参照我的  另一篇clickhouse安装记录

clickhouse概念框架

常用命令

1.服务启动/停止

注:需要按照教程正确安装了服务后

启动: service clickhouse-server start

停止:service clickhouse-server stop

重启:service clickhouse-server restart

2.登录

clickhouse-client --user 你的账号  --password 你的密码

3.数据库

3.1查看数据库

show databases

注意:在对数据表进行操作的时候,如果不指定数据库名的话。会对上图的default库进行操作,比如新建或者查询。

3.2新建数据库

3.2.1clickhouse数据库引擎

CREATE  [IF NOT EXISTS] DATABASE 你的数据库名称  [ON CLUSTER cluster] ;

3.2.2mysql数据库引擎

CREATE DATABASE [IF NOT EXISTS] 你的数据库名称 [ON CLUSTER cluster] ENGINE = MySQL('你的mysql地址  :   你的mysql端口 ', ['连接的mysql数据里的数据库' | 你的数据库名称], '你的mysql账号', '你的mysql密码')

3.2.3延迟引擎

没什么使用场景

3.2.4Atomic

没什么使用场景,官方也没留什么资料

3.3 删除数据库

drop database 你的数据库名称

注意:删库要小心呀

4.数据表

clickhouse中的数据表分为本地表和分区表,其中本地表是真正持有数据的结构,分区表并不真正存储数据,只是给用户一个操作集群所有数据的入口。

举个例子,假设有一个机器A、B、C组成的clickhouse集群,且每个机器都是clickhouse的一个分片:

初始状态下:

机器名称本地表本地表数据全局表
Ahello1hello_all
Bhello1hello_all
Chello1hello_all

state1:  对   机器A   的  hello  本地表   插入数据  [2,3,4] ,插入完成后所有的插入数据都进入到服务器A本地进行存储了,集群的数据状态如下所示:

机器名称本地表本地表数据全局表
Ahello1,2,3,4hello_all
Bhello1hello_all
Chello1hello_all

state2: 对  机器B  的  hello_all 全局表   插入  [2,3,4], 插入完成后。集群的数据状态可能如下所示:

机器名称本地表本地表数据全局表
Ahello1,2hello_all
Bhello1,3hello_all
Chello1,4hello_all

4.1 本地表

4.1.1建表

clickhouse有自己的字段数据结构,主要有整形(Int8-Int64、UInt8-UInt64)、浮点型(Float32:float、Float64:double)、字符串(String, FixString(N))、枚举型、数组型、元组型、日期及时间戳这些数据类型。与常见的mysql里的数据类型的对应关系参考概念框架中的数据类型部分。

在时间应用场景里主要是使用mergetree家族引擎。mergetree家族的引擎主要是基于mergetree引擎的基础上增加了些特定功能如预先统计、唯一索引之类的。此处不做详细讨论,可以参考官方文档进行了解。处理mergetree家族之外的其他引擎使用场景都极少,这里以最常见的mergetree为例,举个例子新建数据表(index_granularity 是指定多少条数据clickhouse对数据进行压缩打包,默认是8192):

CREATE TABLE 你想建的数据表名

(`字段1` String,`字段2` String) 

ENGINE = MergeTree

PARTITION BY 你想用来分区的字段名

ORDER BY  “索引”字段名(可以多个)

SETTINGS index_granularity = 8192;

4.1.2删表

drop table 你要删除的表

4.1.3修改表

不建议直接在线上环境上对数据表进行修改。因为有数据的情况修改表结构会导致clickhouse要花费资源进行数据重排等操作,操作不慎可能会有数据丢失|错误的风险。

改变表结构:

ALTER TABLE [你的数据库].你的数据表   [ON CLUSTER cluster]    ADD|DROP|CLEAR|COMMENT|MODIFY  COLUMN ...

1.增加列

ADD COLUMN [IF NOT EXISTS] 新增列名 [新增列的数据类型] [新增列的默认值]  [AFTER  新增列字段放置哪个列之后]

demo: 

ALTER TABLE visits ADD COLUMN browser String AFTER user_id

2.删除列

DROP COLUMN [IF EXISTS]  待删除列名

ALTER TABLE visits DROP COLUMN browser

3.重置列

CLEAR COLUMN [IF EXISTS]  待清空列名 (也可以在后面加入条件进行处理)

ALTER TABLE op_log_recharge CLEAR COLUMN recharge_money 
# 可选的后续条件
# (IN PARTITION tuple())
# (where dateStr = '2021-05-20')

4.增加注释

COMMENT COLUMN [IF EXISTS]  列名   '新加的注释'

ALTER TABLE op_log_login COMMENT COLUMN userId '用户角色Id'

5.改变列的数据类型、默认表达式及TTL

MODIFY COLUMN [IF EXISTS] 列名  [数据类型] [默认值] [数据过期时间TTL]

ALTER TABLE op_log_login MODIFY COLUMN userIp String

4.2 分区表

分区表和本地表归类于table,但是分区表并没有像本地表一样真正存储了数据,更像是将用户指令在集群上做map-reduce的一个入口。

因为clickhouse的集群数据同步是以异步任务的方式在节点中进行同步的,所以在连接中通过对分区表给集群新增数据的时候,数据可能会延迟存入分区表中(理论上集群的节点越多,完成同步的时间就越长)。在通过分区表进行集群查询的实践中是非常流畅的,在插入中则经常需要等待十几秒数据才能完全同步,所以有能力的团队都会将分区表的集群插入添加一个中间层来完成,可以实现按自己的逻辑将数据落盘到不同分片的本地表里。

4.2.1建表

CREATE TABLE  分区表名称  AS 本地表名称 ENGINE = Distributed(集群名称, 数据库名称, 本地表名称, 数据分配模式)

其中集群名称可以参考我的另一篇clickhouse安装记录中如何配置的集群名称;数据分配模式是指的如何将数据分配到不同切片上的,最常用的是rand()将需要数据随机分配到不同分片,保持每个节点的压力比较均衡。

4.2.2删表

drop table 你要删除的表

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值