本文已参与「新人创作礼」活动,一起开启掘金创作之路。
安装
docker体验clickhouse一条docker命令就启动了。
docker run -d --name my-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
#注意需要指定host端口
docker run -d -p 8123:8123 -p 9000:9000 -p9009:9009 --name my-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
下面直接打开web ui进行操作:http://localhost:8123/play
使用
打开了web ui 就可以在上面输入sql命令了,大部分指令都跟常见的Mysql类似; 比如说在编辑框输入:show databases; 就可以查看ClickHouse里预先创建的数据库
sql语句兼容
一条常规的mysql创建表语句的改写过程:
CREATE TABLE gettingstarted.username (
`user_id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '类别主键id',
`user_name` varchar(255) NOT NULL COMMENT '用户名称',
`status` tinyint(255) NOT NULL DEFAULT 0 COMMENT '用户状态',
`delete_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '删除时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
INDEX `ix_created_at`(created_at)
) ENGINE = InnoDB CHARACTER SET = utf8 COMMENT='用户信息表';
报错: Code: 62. DB::Exception: Syntax error: failed at position 72 ('AUTO_INCREMENT ') (line 2, col 32): AUTO_INCREMENT COMMENT '类别主键id',
不支持AUTO_INCREMENT 看来是不支持自增id,删掉AUTO_INCREMENT
Code: 62. DB::Exception: Syntax error: failed at position 189 ('DEFAULT') (line 4, col 31): DEFAULT CURRENT_TIMESTAMP COMMENT '删除时间',
不支持设置DEFAULT默认值,清除掉
DB::Exception: Syntax error: failed at position 391 (')') (line 9, col 1): ) ENGINE = InnoDB CHARACTER SET = utf8 COMMENT='用户信息表';
不支持建立索引
Code: 62. DB::Exception: Syntax error: failed at position 391 (',') (line 8, col 37): ,\
INDEX `ix_updated_at` (updated_at)\
\
)
需要指定引擎 &不支持InnoDB --说明事物实现机制可能有区别或者不支持事务?
Code: 56. DB::Exception: Unknown table engine InnoDB. (UNKNOWN_STORAGE) (version 22.3.2.1)
Code: 119. DB::Exception: Table engine is not specified in CREATE query. (ENGINE_REQUIRED) (version 22.3.2.1)
不支持设置utf8字符 Code: 62. DB::Exception: Syntax error: failed at position 384 ('CHARACTER') (line 10, col 1): CHARACTER SET = utf8
最终的sql脚本为
CREATE TABLE demo.userinfos (
`user_id` bigint(0) NOT NULL COMMENT '类别主键id',
`user_name` varchar(255) NOT NULL COMMENT '用户名称',
`delete_time` datetime NOT NULL COMMENT '删除时间',
`updated_at` datetime NOT NULL COMMENT '更新时间',
`created_at` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`user_id`)
)ENGINE = MergeTree()
COMMENT '用户信息表'
查看表结构
String 类型替换了 VARCHAR类型
具体增删改查
插入操作跟常规mysql一致,两种方法
insert into demo.userinfos values(001,'zhangsan','2022-04-02','2022-04-01','2022-04-01')
insert into demo.userinfos (user_id,user_name,delete_time,updated_at,created_at) values(002,'lisi','2022-04-02','2022-04-01','2022-04-01')
查找
删除
delete from demo.userinfos where user_id='1' 报错:
DB::Exception: Syntax error: failed at position 1 ('delete'): delete from demo.userinfos where user_id='1'\
. Expected one of: Query, Query with output, EXPLAIN, SELECT query, possibly with UNION, list of union elements, SELECT query, subquery, possibly with UNION, SELECT subquery, SELECT query, WITH, SELECT, SHOW CREATE QUOTA
看情况不支持这种操作,clickhouse里面增加和删除是类似sql中alter表结构语句,delete 和 update合并在一起去操作了。
删除
ALTER TABLE demo.userinfos DELETE WHERE user_id='1'
更新
ALTER TABLE <table_name> UPDATE col1 = expr1, ... WHERE <filter>
clickhouse客户端操作方式
就是以终端命令行提供的操作clickhouse的方式,用的话比较简单,要么就是安装客户端,要么就是采用docker 启动
docker run -it --rm --link my-clickhouse-server:clickhouse-server clickhouse/clickhouse-client --host clickhouse-server
总结
十五分钟从本机安装下载到使用走了一遍,做为使用方,基本操作跟mysql差不多,没什么门槛,更重要的是去了解下比较核心的设计,比如大数据量场景下怎么去做,怎么去实现,打个比方怎么去支持大数据量、怎么去做集群的扩容、列存储具体是怎么存储的。下节继续去探索。