Clickhouse从安装到简单使用初体验

1,826 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

安装

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

image.png

使用

打开了web ui 就可以在上面输入sql命令了,大部分指令都跟常见的Mysql类似; 比如说在编辑框输入:show databases; 就可以查看ClickHouse里预先创建的数据库

image.png

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 '用户信息表'

查看表结构

image.png

 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')

查找

image.png

删除

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
    

image.png

总结

十五分钟从本机安装下载到使用走了一遍,做为使用方,基本操作跟mysql差不多,没什么门槛,更重要的是去了解下比较核心的设计,比如大数据量场景下怎么去做,怎么去实现,打个比方怎么去支持大数据量、怎么去做集群的扩容、列存储具体是怎么存储的。下节继续去探索。