1.clickhouse的本地表一般由目录+文件构成,比如有以下的表定义:
create table tableA (id uint8,name String,createTime DateTime) engine=mergeTree partition by toYYMMDD(createTime) order by id
对应的目录结构如下:
当进行mutation操作,也就是就行update或者delete语句的时候,比如执行以下sql:
alter table tableA update name=‘’ where id in ()
alter table tableA delete where id < 100
操作时,对于clickhouse来说,这些操作都是后台异步执行的,并且是重量级的操作,它实现的原理是重新创建每个分区的数据,把旧的分区数据拷贝到新创建的分区中,在这个过程中进行数据的删除或者修改,当分区的数据量很大时,这是一个很耗费资源的操作。
2.clickhouse的视图主要有两种,一种是普通视图,普通视图就是对底层表的一层封装,本身不存储数据,只包含视图定义。另一种是物化视图,物化视图可以指定存储引擎,本身可以存储数据,当底层表有数据新增操作时,物化视图会把这些数据同步过来,初始化物化视图的时候也可以指定是否可以用底层表的数据全量同步一次,不过物化视图对于底层表的数据删除操作不做出反应,也就是物化视图不会删除数据