电子商务网站建设教学实施建设,常州建站服务,交易所网站建设,江苏专业做网站的公司有哪些MergeTree一、Clickhouse表引擎概述二、MergeTree表引擎一、ReplacingMergeTree引擎二、SummingMergeTree引擎三、AggregatingMergeTree引擎三、MergeTree分区一、Clickhouse表引擎概述 MergeTree表引擎:允许根据日期和主键创建索引 1、ReplacingMerge…
MergeTree一、Clickhouse表引擎概述二、MergeTree表引擎一、ReplacingMergeTree引擎二、SummingMergeTree引擎三、AggregatingMergeTree引擎三、MergeTree分区一、Clickhouse表引擎概述 MergeTree表引擎:允许根据日期和主键创建索引 1、ReplacingMergeTree该引擎和 MergeTree 的不同之处在于它会删除具有相同主键的重复项。数据 的去重只会在合并的过程中出现。因此ReplacingMergeTree 适用于在后台清除重复的数据以节省空 间但是它不保证没有重复的数据出现。 2、SummingMergeTree把所有具有相同主键的行合并为一行并添加合并行的聚合值。如果单个键值 对应于大量的行则可以显著的减少存储空间并加快数据查询的速度。 3、AggregatingMergeTree将相同主键的所有行在一个数据片段内替换为单个存储一系列聚合函 数状态的行。可以使用 AggregatingMergeTree 表来做增量数据统计聚合包括物化视图的数据聚合 Distributed分布式引擎本身不存储数据,但可以在多个服务器上进行分布式查询 外部存储表引擎,如HDFS、Mysql、JDBC、Kafka、File,相当于外部数据源 内存表引擎,如Memory、Set、Join、Buffer,实现内存加速和各种功能 还有其他如日志表引擎、接口引擎(自定义)、Null表引擎、URL表引擎
二、MergeTree表引擎 需要注意两点:
MergeTree的主键(primary key)只是用来生成一级索引(primary)的,并没有唯一性约束这样的语义;order by决定了每个分区中数据的排序规则,order by可以指代primary key,通常只用声明order by即可通常只有SummingMergeTree或AggregatingMergeTree的时候,才需要同时设置order by和primary key,显式的设置primary key,是为了将主键和排序键设置成不同的值,是进一步优化的体现,比如聚合条件group by a,b,c,过滤条件where A,此时order by a,b,c,primary key a,注意,如果order by和primary key不同,primary key必须是order by的前缀(为了保证分区内数据和逐渐的有序性)
一、ReplacingMergeTree引擎
设计为相同分区的数据进行数据去重
使用order by排序键作为唯一键以分区为单位进行去重,只在分区合并时进行触发如果参数没设置列,则保留重复数据的最后一行如果参数设置了列,则保留重复数据中取值最大的一行
二、SummingMergeTree引擎
只需要根据group by条件得到汇总结果(sum),不关心明细数据,解决存储和查询的开销
使用order by排序键作为聚合汇总的条件key以分区为单位进行聚合,只在分区合并时进行触发如果指定了columns汇总列,则sum汇总这些字段如果未指定columns汇总列,则sum汇总在所有非主键的数值类型字段如果order by和primary key的字段不相同,pk列字段必须是order by的前缀,即order by(b,c) primary key A不合法非聚合字段,使用第一行数据的取值
三、AggregatingMergeTree引擎
AggregatingMergeTree是SummingMergeTree的升级版。聚合函数通过AggregateFunction实现
使用order by排序键作为聚合数据的条件key以分区为单位进行聚合,只在分区合并时触发不需要指定列,但需要通过AggregateFunction声明写入数据时,需要调用State;读取数据,需要调用Merge数据不能通过普通的insert插入,而只能通过insert into select
三、MergeTree分区
MergeTree…Partition By toYYYYMM(Date)
ClickHouse的表可以根据任意表达式分区不同分区不会合并合并可以通过optimize table命令触发可以对分区进行操作
在MergeTree引擎下,每次insert into,即使数据属于同一个分区,但数据在存储上都会生成一个新的分区目录.目录名为201909_1_1_0 命名规范: parititionId_minBlockNum_maxBlockNum_level BlockNum:数据表全局自增,初始值从1开始,新建分区minBlockNum和maxBlockNum相同 Level:合并的次数