clickhouse 数据库 表 列(DDL)

注意事项

1)只有MergeTree引擎才支持对列的修改操作
2)只有MergeTree引擎才支持数据的更新和删除
2)只有MergeTree引擎才支持分区表

表操作

创建表

create table new_table as old_table;

显示视图

Show Views;
SHOW VIEWS 'test_*'; -- show all views that start with "test_"
SHOW VIEWS FROM test1; -- show views from database test1

显示物化视图

SHOW MATERIALIZED VIEWS [FROM database_name];

查看表的类型

SHOW CREATE TABLE XXX;

查看表的字段

DESC XXXX;

表重命名、移动表位置(库与库之间)

-- 修改表名
rename table test_dml to test_tbl_dml;

-- 将表从a库移动到b库,并修改表名

rename table default.test_tbl_dml to learn_db.new_tbl_dml;

列操作

添加列

-- 原有列的末尾添加新列
alter table test_dml add column age UInt8;

-- 指定列的后添加新列
alter table test_dml add column gender String after name;

删除列

alter table test_dml drop column  age;

修改列的数据类型

-- 修改列的数据类型,并给默认值0
alter table test_dml modify column gender UInt8 default 0;

在这里插入图片描述

修改或添加字段注释

alter table test_dml comment  column name  'name的备注';

在这里插入图片描述

给列增加TTL

ALTER TABLE tbl_order_activity
    MODIFY COLUMN
    activty_notice String TTL dt + INTERVAL 10 SECOND;

创建表时,给某列指定TTL

drop table t_order_mt3;
create table t_order_mt3
(
    id           UInt32,
    sku_id       String,
    total_amount Decimal(16, 2) TTL create_time + interval 30 SECOND,
    create_time  Datetime
) engine = MergeTree
      partition by toYYYYMMDD(create_time)
      primary key (id)
      order by (id, sku_id);


insert into t_order_mt3 values (106, 'sku_001', 1000.00, '2020-06-12 22:52:30'),
                               (106, 'sku_001', 123.00, now());

select *
from t_order_mt3;

在这里插入图片描述
单机测试,想要看到效果,则需要做以下步骤1、2

1)重启服务

sudo clickhouse restart

2)手动合并分区

OPTIMIZE TABLE t_order_mt3 FINAL;

3)查询数据

select *
from t_order_mt3

在这里插入图片描述

数据更新和删除

只有MergeTree擎才支持数据的更新和删除


create table tb_update
(
    id   UInt32,
    name String,
    age  String
) engine = MergeTree
      order by id
;


insert into tb_update
values (1, 'zs', 'M'),
       (2, 'ls', 'F');
-- 更新
alter table t1 update name='李四' where id=2;
-- 删除
alter table t1 delete where id = 2;

虽然ck支持数据更新和删除,但是比较重,每次修改或者删除,都会导致放弃原有分区,重新建分区

优化:可以设计一些版本字段,定期对老数据进行删除

create table A
(
  axxx,
  bxxx,
  cxxx,
  _signUInt8,
  _versionUInt32
);

==> 更新:插入一条新的数据,_version + 1
	查询的时候加上一个过滤条件,where version 最大
==> 删除:_sign,0 表示未删除,1 表示已删除,同时version + 1
	查询的时候加上一个过滤条件,where_sign = 0 and version 最大
==> 时间久了,数据膨胀了==》 类似合并机制,怎么把过期数据清除掉
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值