表引擎(即表的类型)决定了【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的规则,将数据分布到各个节点的本地表。
网友评论