大数据ClickHouse(十三):MergeTree系列表引擎之VersionedCollapsingMergeTree

Posted Lansonli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据ClickHouse(十三):MergeTree系列表引擎之VersionedCollapsingMergeTree相关的知识,希望对你有一定的参考价值。

文章目录

MergeTree系列表引擎之VersionedCollapsingMergeTree

一、VersionedCollapsingMergeTree基本讲解

二、测试实例


MergeTree系列表引擎之VersionedCollapsingMergeTree

一、VersionedCollapsingMergeTree基本讲解

上面提到CollapsingMergeTree表引擎对于数据写入乱序的情况下,不能够实现数据折叠的效果。VersionedCollapsingMergeTree表引擎的作用与CollapsingMergeTree完全相同,它们的不同之处在于,VersionedCollapsingMergeTree对数据的写入顺序没有要求,在同一个分区内,任意顺序的数据都能够完成折叠操作。

VersionedCollapsingMergeTree使用version列来实现乱序情况下的数据折叠,该引擎除了需要指定一个sign标识之外,还需要指定一个UInt*类型的version版本号。

  • VersionedCollapsingMergeTree建表语句:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
sign Int8,
version UInt8
) ENGINE = VersionedCollapsingMergeTree(sign, version)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

二、测试实例

#创建表 t_version_collapsing_mt ,使用VersionedCollapsingMergeTree引擎
node1 :) create table t_version_collapsing_mt(
:-] id UInt8,
:-] name String,
:-] loc String,
:-] login_times UInt8,
:-] total_dur UInt8,
:-] sign Int8,
:-] version UInt8
:-] ) engine = VersionedCollapsingMergeTree(sign,version)
:-] order by (id,total_dur)
:-] primary key id 
:-] partition by loc;

#向表 t_version_collapsing_mt 中插入以下数据
node1 :) insert into table t_version_collapsing_mt values(1,'张三','北京',1,30,-1,1),(2,'李四','上海',1,40,1,2);

#查询表 t_version_collapsing_mt 中的数据
node1 :) select * from t_version_collapsing_mt;
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  1  │ 张三  │ 北京  │           1   │        30   │    -1 │       1   │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  2  │ 李四  │ 上海  │           1   │        40    │    1 │       2  │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘

#向表 t_version_collapsing_mt中插入以下数据,删除“张三”信息,更新“李四”信息
node1 :) insert into table t_version_collapsing_mt values(1,'张三','北京',1,30,1,1),(2,'李四','上海',1,40,-1,2),(2,'李四','上海',2,100,1,2);

#查询表 t_version_collapsing_mt中的数据
node1 :) select * from t_version_collapsing_mt ;
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  1  │ 张三  │ 北京  │           1   │        30    │   -1  │       1 │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  2  │ 李四  │ 上海  │           1   │        40   │    1  │       2   │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  1  │ 张三  │ 北京  │           1   │        30   │    1  │       1   │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  2  │ 李四  │ 上海  │           1   │        40   │   -1  │       2  │
│  2  │ 李四  │ 上海  │           2   │       100   │    1  │       2  │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘

#手动执行 optimize 命令,合并相同分区的数据,这里有可能需要执行多次
node1 :) optimize table t_version_collapsing_mt;

注意:如果不想执行多次,也可以执行 optimize table t_version_collapsing_mt final语句

#查询表 t_version_collapsing_mt 中的数据如下:
node1 :) select * from t_version_collapsing_mt; 
┌─id─┬─name─┬─loc──┬─login_times─┬─total_dur─┬─sign─┬─version─┐
│  2  │ 李四  │ 上海  │           2   │       100   │    1  │       2  │
└────┴──────┴──────┴─────────────┴───────────┴──────┴─────────┘

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

以上是关于大数据ClickHouse(十三):MergeTree系列表引擎之VersionedCollapsingMergeTree的主要内容,如果未能解决你的问题,请参考以下文章

大数据ClickHouse(十三):MergeTree系列表引擎之VersionedCollapsingMergeTree

在 ClickHouse 中过滤计数

客快物流大数据项目(九十三):ClickHouse的ReplacingMergeTree深入了解

大数据ClickHouse进阶:ClickHouse 数据查询

大数据ClickHouse进阶(二十六):ClickHouse数据备份

大数据ClickHouse进阶(十九):ClickHouse字典的数据源