-- 第一种方式创建表
create database IF NOT EXISTS newdb on cluster clickHouse_cluster_3shards_1replicas engine = Ordinary;
show tables in newdb;
create table if not exists newdb.t1
on cluster clickHouse_cluster_3shards_1replicas
(
id UInt8 default 0 comment '编号',
name String default '无姓名' comment '姓名',
age UInt8 default 18 comment '年龄',
gender Enum8('男'=1,'女'=0) default 1 comment '性别',
create_time DateTime default now() comment '创建时间'
)engine = MergeTree()
order by (id,name,age)
partition by toYYYYMMDD(create_time);
insert into newdb.t1(id,name,age) values(1,'chauncy1',18)(2,'chuancy2',19);
insert into newdb.t1 values
(3,'chauncy3',20,'女',toDateTime('2022-03-03 12:28:38')),
(4,'chauncy4',21,'男',toDateTime('2022-03-04 12:28:38')),
(5,'chauncy5',22,'女',toDateTime('2022-03-05 14:48:08')),
(6,'chauncy6',23,'男',toDateTime('2022-03-06 14:48:08'));
-- 查看分区
select table ,partition ,name ,active from system.parts where table = 't1';
-- 第二种方式创建表
create table if not exists t2 engine = Memory as newdb.t1;
-- 第三种方式创建表
create table if not exists t3 engine = Memory as select * from newdb.t1 where id >2;
-- 查询表t3数据
select * from t3;
查看表
SHOW TABLES;
SHOW TABLES IN default;
SHOW CREATE TABLE XXX;
desc t3;
删除表
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
修改表
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...IN Partition 'xxx';
RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster];
-- 添加列
--newdb 库,创建表 t1,使用MergeTree引擎
create table if not exists newdb.t1
on cluster clickHouse_cluster_3shards_1replicas
(
id UInt8 default 0 comment '编号',
name String default '无姓名' comment '姓名',
age UInt8 default 18 comment '年龄',
gender Enum8('男'=1,'女'=0) default 1 comment '性别',
create_time DateTime default now() comment '创建时间'
)engine = MergeTree()
order by (id,name,age)
partition by toYYYYMMDD(create_time);
insert into newdb.t1(id,name,age) values(1,'chauncy1',18)(2,'chuancy2',19);
insert into newdb.t1 values
(3,'chauncy3',20,'女',toDateTime('2022-03-03 12:28:38')),
(4,'chauncy4',21,'男',toDateTime('2022-03-04 12:28:38')),
(5,'chauncy5',22,'女',toDateTime('2022-03-05 14:48:08')),
(6,'chauncy6',23,'男',toDateTime('2022-03-06 14:48:08'));
-- 查看分区
select table ,partition ,name ,active from system.parts where table = 't1';
-- 查看表test1表结构
desc t1;
-- 添加表字段
alter table t1 add column hobby Array(String); -- 节点上增加字段
alter table t1 ON CLUSTER clickHouse_cluster_3shards_1replicas add column hobby Array(String);
-- 删除表字段
alter table t1 drop column hobby;
-- 清空某一列= 设置默认值 主键涉及的列无法清空
alter table t1 ON CLUSTER clickHouse_cluster_3shards_1replicas clear column gender;
-- 清空某个分区的列数据
alter table t1
ON CLUSTER clickHouse_cluster_3shards_1replicas
clear column gender
in partition '20220304';
-- 删除列
alter table t1 ON CLUSTER clickHouse_cluster_3shards_1replicas drop column gender;
-- 修改列类型
alter table t1 ON CLUSTER clickHouse_cluster_3shards_1replicas modify column hobby Array(String);
-- 表重命名
RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster];
RENAME TABLE newdb.t1 TO newdb.t01 ON CLUSTER clickHouse_cluster_3shards_1replicas;
--查看表结构,添加字段成功
desc t1;
分区表的DDL操作
-- ClickHouse中只有MergeTree家族引擎下的表才能分区
-- 创建分区表
create table if not exists newdb.tp1
(
id UInt8 default 0 comment '编号',
name String default '无姓名' comment '姓名',
age UInt8 default 18 comment '年龄',
gender Enum8('男'=1,'女'=0) default 1 comment '性别',
create_time DateTime default now() comment '创建时间'
)engine = MergeTree()
order by (id,name,age)
partition by toYYYYMMDD(create_time);
insert into newdb.tp1(id,name,age) values(1,'chauncy1',18)(2,'chuancy2',19);
insert into newdb.tp1 values
(3,'chauncy3',20,'女',toDateTime('2022-03-03 12:28:38')),
(4,'chauncy4',21,'男',toDateTime('2022-03-04 12:28:38')),
(5,'chauncy5',22,'女',toDateTime('2022-03-05 14:48:08')),
(6,'chauncy6',23,'男',toDateTime('2022-03-06 10:48:08')),
(7,'chauncy7',24,'女',toDateTime('2022-03-07 14:48:08')),
(8,'chauncy8',25,'女',toDateTime('2022-03-03 05:48:08')),
(9,'chauncy9',26,'男',toDateTime('2022-03-06 11:48:08')),
(10,'chauncy10',27,'女',toDateTime('2022-03-06 08:48:08'));
-- 查看分区信息
select database,table,name,partition from system.parts where table = 'tp1';
-- 合并
optimize table tp1 final;
-- 卸载分区
select * from tp1;
ALTER TABLE tp1 DETACH PARTITION '20220303';
select database,table,name,partition from system.parts where table = 'tp1';
-- 装载分区
ALTER TABLE table_name ATTACH PARTITION partition_expr;
select * from tp1;
ALTER TABLE tp1 ATTACH PARTITION '20220303';
--删除分区
ALTER TABLE table_name DROP PARTITION partition_expr;
--执行删除分区命名是直接将对应分区数据删除,不会放入detached目录。该操作会将分区标记为不活跃的,然后在大约10分钟内删除全部数据
ALTER TABLE tp1 DROP PARTITION '20220303';
-- 替换分区 从不同的表复制数据
ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1;
-- 移动分区
ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest;
-- 重置分区列
ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr;