clickhouse使用ReplicatedMergeTree、Distributed

表引擎(即表的类型)决定了【https://clickhouse.tech/docs/zh/engines/table-engines/】:

1、数据的存储方式和位置,写到哪里以及从哪里读取数据

2、支持哪些查询以及如何支持。

3、并发数据访问。

4、索引的使用(如果存在)。

5、是否可以执行多线程请求。

6、数据复制参数。

创建表使用引擎ReplicatedMergeTree、Distributed的语法格式:

CREATE TABLE [IFNOTEXISTS] [db.] table_name [ON CLUSTER cluster]

CREATE TABLE dm_report.table_name_data ON cluster bi_autorun_cluster

(

udid  String,

app_id  String,

) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/dm_report.table_name_data', '{replica}')

ORDER BY udid SETTINGS index_granularity = 8192, use_minimalistic_part_header_in_zookeeper = 1;


CREATE TABLE dm_report.table_name ON cluster bi_autorun_cluster

(

udid  String,

app_id  String,

) ENGINE = Distributed(bi_autorun_cluster, dm_report, table_name_data, rand());

ReplacingMergeTree引擎,可以针对相同主键的数据进行去重,它能够在合并分区时删除重复的数据。常使用这种引擎实现真正存储数据, 由于是分布式建表的, 数据分布在集群的各个机器中, 直接查表数据查不全, 所以要用到Distributed。

Distributed相当于视图, 不真正存储数据, 用来查数据, 速度快、数据全。

Distributed表引擎是分布式表的代名词,它自身不存储任何数据,数据都分散存储在某一个分片上,能够自动路由数据至集群中的各个节点,所以Distributed表引擎需要和其他数据表引擎一起协同工作。

所以,一张分布式表底层会对应多个本地分片数据表,由具体的分片表存储数据,分布式表与分片表是一对多的关系【https://www.jianshu.com/p/3fbcc98a5021】

所以Distributed表引擎的定义形式如下

Distributed(cluster_name,database_name,table_name[,sharding_key])

各个参数的含义分别如下:

cluster_name:集群名称,与集群配置中的自定义名称相对应。

database_name:数据库名称

table_name:表名称

sharding_key:可选的,用于分片的key值,在数据写入的过程中,分布式表会依据分片key的规则,将数据分布到各个节点的本地表。

你可能感兴趣的:(clickhouse使用ReplicatedMergeTree、Distributed)