关于列式数据库:MergeTree-创建方式和存储结构
创立形式和存储构造Mergetree在写入数据时,数据总会以数据片段的模式写入磁盘,为了防止片段过多,ClickHouse会通过后盾线程,定期合并这些数据片段,属于雷同分区的数据片段会被合并成一个新的片段,正式合并树名称的由来。 创立形式CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2) ENGINE = MergeTree()[PARTITION BY expr][ORDER BY expr][PRIMARY KEY expr][SAMPLE BY expr][SETTINGS name=value, ...]主要参数: PARTITION BY分区键,不申明分区键,则会默认生成一个名为all的分区。 ORDER BY必填,排序键,默认状况下主键与排序键雷同。 PRIMARY KEY会依据主键字段生成一级索引,用于减速查问,可不申明,默认是ORDER BY定义的字段。 SAMPLE BY抽样表达式,申明数据以何种规范进行采样,如果应用此配置,必须子主键的配置中也申明同样的表达式。ORDER BY (CounterID,intHash32(UserID))SAMPLE BY intHash32(UserID) SETTINGSindex_granularity:索引粒度,默认8192,也就每隔8192行才生成一条索引enable_mixed_granularity_parts:是否开启自适应索引距离性能,默认开启index_granularity_bytes:索引粒度,依据每一批次写入数据的大小,动静划分距离大小,默认10M(10*1024*1024) 存储构造创立测试表 CREATE TABLE test.part_v1( `ID` String, `URL` String, `age` UInt8 DEFAULT 0, `EventTime` Date)ENGINE = MergeTree()PARTITION BY toYYYYMMDD(EventTime)ORDER BY IDSETTINGS index_granularity = 8192插入数据 ...