前言
这里我们介绍ClickHouse的基本语法,使用环境是腾讯云的ClickHouse。默认情况下,ClickHouse 在进行集群纬度执行建表等 DDL 操作时需要手动添加 ON CLUSTER XXX 语法。
下面我会介绍常用的语法 [其中 launch 为我们的数据库名]
创建表
我们创建一张广告点击表作为演示案例,点击表click的创建语句
CREATE TABLE click ON CLUSTER default_cluster (
id UInt64,
product_type UInt32,
channel_type String,
agent_name String,
advertiser_id String,
aid String,
request_id String,
imei String,
idfa String,
android_id String,
oaid String,
os String,
mac String,
ip String,
ts String,
callback_url String,
data String,
expire DateTime,
create_time date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(create_time)
PRIMARY KEY id
ORDER BY id;
建表语句生成
在ClickHouse中可以通过SHOW CREATE TABLE语法来生成建表语句,例如:
SHOW CREATE TABLE test_table
SHOW CREATE launch.click;
修改表名语句
在ClickHouse中可以通过RENAME TABLE语法来修改表名语句,例如:
RENAME TABLE table_name TO table_name_new ON CLUSTER default_cluster;
RENAME TABLE click TO click_new ON CLUSTER default_cluster;
查看表结构语句
在ClickHouse中,可以使用DESCRIBE语法来查看表的结构,例如:
DESCRIBE table_name;
DESCRIBE launch.click;
添加列
修改表结构,添加一个新列:
ALTER TABLE table_name ADD COLUMN new_column_name type;
ALTER TABLE click ON CLUSTER default_cluster
ADD COLUMN channel_id String;
字段添加备注
ALTER TABLE table_name [on cluster cluster_name]
comment COLUMN column_name "message"
ALTER TABLE click ON CLUSTER default_cluster
comment COLUMN create_time '创建时间';
删除列
删除表中的一个列:
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE click ON CLUSTER default_cluster
DROP COLUMN channel_id
修改列类型
修改某个列的数据类型:
ALTER TABLE table_name MODIFY COLUMN column_name new_type;
ALTER TABLE click ON CLUSTER default_cluster
MODIFY COLUMN create_time DateTime;
删除表语法
删除表语法格式:DROP TABLE table_name ;
DROP TABLE click ON CLUSTER default_cluster;
修改表数据
修改单条记录
修改表中指定记录的某个列的值
ALTER TABLE table_name UPDATE column_name = new_value WHERE condition;
ALTER TABLE click
UPDATE agent_name ='xm' where id = 271494392
批量修改记录
批量修改表中的多条记录:
ALTER TABLE table_name UPDATE column_name = new_value WHERE condition;
删除记录
ALTER TABLE table_name DELETE WHERE condition;
ALTER TABLE click
DELETE where id = 271494392
小数类型查询
select * from click_cost
where create_time>='2024-01-16' and create_time<'2024-01-17'
and toFloat32(cost) > 0.01
最佳实践
ClickHouse中的修改操作主要是通过重写表数据来完成的,而不是更新原始数据。这也意味着点击修改操作会带来较大的性能损失,特别是在大表上的修改会极大地影响性能。因此,尽量避免在ClickHouse上进行大量更新操作。