Clickhouse之更新表(ReplacingMergeTree)

1、INSERT+Final方式

这种方法需要ReplacingMergeTree表引擎配置使用

sql 复制代码
CREATE TABLE tb_test_replacing(
ts DateTime,
uid String,
biz String
) ENGINE = ReplacingMergeTree(ts) ORDER BY (ts) SETTINGS index_granularity = 8192;

INSERT INTO tb_test_replacing VALUES ('2019-06-07 20:01:01', 'c', 'c1');

这种方式就不用执行alter了,而是以insert的形式来代替alter操作,即每次select时都是取最新的一条数据,sql语句如下

sql 复制代码
INSERT INTO tb_test_replacing VALUES ('2019-06-07 20:01:01', 'c', 'c2');

此时查询该表,发现还是两条数据,并没有实现更新

sql 复制代码
SELECT *
FROM tb_test_replacing

Query id: 02cfecf5-18f1-4f9f-ad55-e7b596935de8

┌──────────────────ts─┬─uid─┬─biz─┐

│ 2019-06-07 20:01:01 │ c │ c2 │

└─────────────────────┴─────┴─────┘

┌──────────────────ts─┬─uid─┬─biz─┐

│ 2019-06-07 20:01:01 │ c │ c1 │

└─────────────────────┴─────┴─────┘

2 rows in set. Elapsed: 0.004 sec.

在sql后面加上final,发现只返回了最新的一条,是符合预期的

sql 复制代码
SELECT *
FROM tb_test_replacing
FINAL

Query id: 614c7e93-48c2-4129-a734-c8a0dd722fcd

┌──────────────────ts─┬─uid─┬─biz─┐

│ 2019-06-07 20:01:01 │ c │ c2 │

└─────────────────────┴─────┴─────┘

1 rows in set. Elapsed: 0.007 sec.

注意:ReplacingMergeTree在建表时可以看到ENGINE = ReplacingMergeTree(ts),其中的ts就是版本信息,clickhouse会每次插入记录版本,就是依据这个字段,在查询时会返回最后最新的版本数据。所以第二个insert的ts和第一个insert的ts字段的值一样,所以会以第二条记录为准,即实现了更新。具体用法见:ReplacingMergeTree

相关推荐
程序员不想YY啊6 分钟前
MySQL元数据库完全指南:探秘数据背后的数据
数据库·mysql·oracle
数据最前线10 分钟前
Doris表设计与分区策略:让海量数据管理更高效
数据库
时光追逐者19 分钟前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb
头顶秃成一缕光42 分钟前
Redis的主从模式和哨兵模式
数据库·redis·缓存
AIGC大时代44 分钟前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
博睿谷IT99_1 小时前
数据库证书可以选OCP认证吗?
数据库·oracle·开闭原则·ocp认证
乐维_lwops1 小时前
数据库监控 | MongoDB监控全解析
数据库·mongodb·数据库监控
观无1 小时前
Redis安装及入门应用
数据库·redis·缓存
柏油2 小时前
MySql InnoDB 事务实现之 undo log 日志
数据库·后端·mysql
DolphinScheduler社区3 小时前
白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证
数据库·开源·认证·崖山数据库·白鲸开源