客户端基本使用
clickhouse 客户端通过clickhouse-client执行
1.1 登录客户端
clickhouse-client --host localhost --port 9000 --user default --password 123456 --multiline
host
: 指定ip,可省略使用默认值localhost,可缩写为h
port
: 指定端口号,可省略
user
: 登录用户,省缺值为default,可缩写为u
password
: 登录密码
multiline
: 允许终端执行多行命令,可缩写m
1.2 不登录客户端直接执行查询
# 直接查询
clickhouse --password 123456 --query "show databases;"
# 执行多行查询 --multiquery
clickhouse-client --password 123456 --multiquery --query "select * from system.clusters; show databases;"
# 将查询结果导出csv文件
clickhouse-client --password 123456 --query "select * from system.clusters limit 1" >/tmp/result.csv
1.3 查看是数据库
show databases;
1.4 创建数据库
语法: CREATE DATABASE [IF NOT EXISTS] DB_NAME
create database if not exists test;
IF NOT EXISTS
如果存在则不创建
# 使用某个数据库
use test;
1.5 建表
语法: CREATE TABLE [IF NOT EXISTS][db.]table_name [ON CLUSTER cluster]
(name1 [type1], name2 [type2] ,...) ENGINE = engine
IF NOT EXISTS
如果表存在则不创建
db
要在那个数据库创建表
table_name
表名称
ON CLUSTER cluster
在集群中创建表,省却则只在当前节点创建表
(name type, ...)
表结构
engine
指定使用的表引擎
create table if not exists test.t_order
(
id Int64 COMMENT '订单id',
datetime DateTime COMMENT '订单日期',
name String COMMENT '商品名称',
price Decimal32(2) COMMENT '商品价格',
user_id Int64 COMMENT '用户id'
) engine = MergeTree
partition by toYYYYMM(datetime)
order by id
partition by toYYYYMM(datetime)
使用datetime 字段按照月进行分区
order by id
使用id进行排序
1.6 插入数据
insert into t_order values (1, '2021-03-09 21:42:00', '大力丸', 999.99, 202003090001)
1.7 查询数据
select * from t_order order by id desc;
查询结果
┌─id─┬────────────datetime─┬─name───┬────price─┬──────user_id─┐
│ 2 │ 2021-03-09 21:45:00 │ 小力丸 │ 99999.99 │ 202004180005 │
└────┴─────────────────────┴────────┴──────────┴──────────────┘
┌─id─┬────────────datetime─┬─name───┬──price─┬──────user_id─┐
│ 1 │ 2021-03-09 21:42:00 │ 大力丸 │ 999.99 │ 202003090001 │
└────┴─────────────────────┴────────┴────────┴──────────────┘
1.8 增加表的列
语法: ALTER TABLE [db].name [ONCLUSTER cluster] ADD COLUMN name type
name
增加的列名
type
列的属性类型
alter table t_order add column addr String;
查看表结构变化
┌─id─┬────────────datetime─┬─name───┬────price─┬──────user_id─┬─addr─┐
│ 2 │ 2021-03-09 21:45:00 │ 小力丸 │ 99999.99 │ 202004180005 │ │
└────┴─────────────────────┴────────┴──────────┴──────────────┴──────┘
┌─id─┬────────────datetime─┬─name───┬──price─┬──────user_id─┬─addr─┐
│ 1 │ 2021-03-09 21:42:00 │ 大力丸 │ 999.99 │ 202003090001 │ │
└────┴─────────────────────┴────────┴────────┴──────────────┴──────┘
1.9 修改列
语法: ALTER TABLE [db].name [ON CLUSTER cluster] MODIFY COLUMN name type
name
修改的的列名
type
要修改成的属性类型
# 将user_id这一列的属性修改为String
alter table t_order modify column user_id String;
1.10 删除列
语法: ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN name
name
要删除的列名
alter table t_order drop column addr;
删除后的表结构
┌─id─┬────────────datetime─┬─name───┬────price─┬─user_id──────┐
│ 2 │ 2021-03-09 21:45:00 │ 小力丸 │ 99999.99 │ 202004180005 │
└────┴─────────────────────┴────────┴──────────┴──────────────┘
┌─id─┬────────────datetime─┬─name───┬──price─┬─user_id──────┐
│ 1 │ 2021-03-09 21:42:00 │ 大力丸 │ 999.99 │ 202003090001 │
└────┴─────────────────────┴────────┴────────┴──────────────┘
1.11 删除数据(不建议的操作)
alter table t_order delete where id = 2;
删除后的结果
┌─id─┬────────────datetime─┬─name───┬──price─┬─user_id──────┐
│ 1 │ 2021-03-09 21:42:00 │ 大力丸 │ 999.99 │ 202003090001 │
└────┴─────────────────────┴────────┴────────┴──────────────┘
1.12 修改数据(不建议)
alter table t_order update price = 0.99 where id = 1;
修改后的结果
┌─id─┬────────────datetime─┬─name───┬─price─┬─user_id──────┐
│ 1 │ 2021-03-09 21:42:00 │ 大力丸 │ 0.99 │ 202003090001 │
└────┴─────────────────────┴────────┴───────┴──────────────┘
1.13 删除分区
alter table t_order drop partition '202103';
建表的时候使用了partition by toYYYYMM(datetime)
数据是按照月进行分区的,那么刚才插入的数据都在这个分区,删除了整个分区的数据,则就没数据撩,一般用于定时删除数据
1.14 查看表结构
desc t_order;
结果
┌─name─────┬─type──────────┬─default_type─┬─default_expression─┬─comment──┬─codec_expression─┬─ttl_expression─┐
│ id │ Int64 │ │ │ 订单id │ │ │
│ datetime │ DateTime │ │ │ 订单日期 │ │ │
│ name │ String │ │ │ 商品名称 │ │ │
│ price │ Decimal(9, 2) │ │ │ 商品价格 │ │ │
│ user_id │ String │ │ │ 用户id │ │ │
└──────────┴───────────────┴──────────────┴────────────────────┴──────────┴──────────────────┴────────────────┘
1.15 删除表
drop table t_order;
1.16 查看表
drop table t_order;
总体来说,clickhouse语法几乎贴近于mysql,入手还是很简单的,但是对于一些高级特性,比如各个表引擎的特性,表引擎的配合使用,用于数据分析等还没有深入学习.
网友评论