跳到主要内容

ClickHouse操作入门

提示

以下操作基于ClickHouse版本:24.6.2

基础操作

创建数据库

CREATE DATABASE IF NOT EXISTS test_database;

删除数据库

DROP DATABASE test_database;

创建表结构

DROP TABLE IF EXISTS test_table;
CREATE TABLE test_table
(
`user_id` UInt32 COMMENT '用户ID',
`message` String COMMENT '消息内容',
`event_time` DateTime COMMENT '事件发生时间',
`cost` Decimal64(5) COMMENT '消费金额',
)
ENGINE = MergeTree
PRIMARY KEY (user_id, event_time)
ORDER BY (user_id, event_time);

插入测试数据

INSERT INTO test_table (user_id,message,event_time,cost) VALUES
(101,'Hello, ClickHouse!', NOW(),-1.0),
(101,'Granules are the smallest chunks of data read',NOW(),3.14159),
(102,'Insert a lot of rows per batch',NOW(),1.41421),
(102,'Sort your data based on your commonly-used queries',NOW(),2.718);

新增字段

ALTER TABLE test_table ADD COLUMN `remark` String DEFAULT '' COMMENT '备注';

修改字段

ALTER TABLE test_table MODIFY COLUMN `remark` Nullable(String) DEFAULT NULL COMMENT '备注';

删除字段

ALTER TABLE test_table DROP COLUMN `remark`;

按查询条件删除数据

DELETE FROM test_table WHERE user_id = 101

更新数据

UPDATE test_table SET message = 'update message' WHERE user_id = 102 

需要注意的是索引列是不可以更新的,比如当前表中user_id为索引列,执行下面sql进行更新会失败

错误操作

UPDATE test_table SET user_id = 103 where user_id = 102

Mutation查询

ClickHouse提供了DELETE和UPDATE的能力,这类操作被称为Mutation查询。可以通过下面sql查询执行进度,is_done等于1时表示执行完毕

SELECT * FROM system.mutations WHERE table='test_table'

分区操作

查询表分区

SELECT partition_id,name,table,database,active FROM system.parts WHERE table = 'test_table'

active列为片段状态。1代表激活状态;0代表非激活状态。非激活片段是那些在合并到较大片段之后剩余的源数据片段。损坏的数据片段也表示为非活动状态。当删除分区后active状态会变成0,一段时间后该条记录会被删除。

删除分区

ALTER TABLE test_table DROP PARTITION partition_v2

复制分区

复制test_table表分区v1中的数据到v3中

ALTER TABLE test_table REPLACE PARTITION partition_v3 FROM partition_v1

重置分区

清空test_table表分区v1中字段message的数据,重置为空字符串

ALTER TABLE test_table CLEAR COLUMN message in PARTITION partition_v1