表引擎(即表的類型)決定了【https://clickhouse.tech/docs/zh/engines/table-engines/】:
1吹散、數(shù)據(jù)的存儲方式和位置滚澜,寫到哪里以及從哪里讀取數(shù)據(jù)
2爹殊、支持哪些查詢以及如何支持蜕乡。
3、并發(fā)數(shù)據(jù)訪問梗夸。
4层玲、索引的使用(如果存在)。
5反症、是否可以執(zhí)行多線程請求辛块。
6、數(shù)據(jù)復(fù)制參數(shù)铅碍。
創(chuàng)建表使用引擎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引擎,可以針對相同主鍵的數(shù)據(jù)進行去重胞谈,它能夠在合并分區(qū)時刪除重復(fù)的數(shù)據(jù)尘盼。常使用這種引擎實現(xiàn)真正存儲數(shù)據(jù),?由于是分布式建表的,?數(shù)據(jù)分布在集群的各個機器中,?直接查表數(shù)據(jù)查不全,?所以要用到Distributed。
Distributed相當(dāng)于視圖,?不真正存儲數(shù)據(jù),?用來查數(shù)據(jù),?速度快烦绳、數(shù)據(jù)全悔叽。
Distributed表引擎是分布式表的代名詞,它自身不存儲任何數(shù)據(jù)爵嗅,數(shù)據(jù)都分散存儲在某一個分片上娇澎,能夠自動路由數(shù)據(jù)至集群中的各個節(jié)點,所以Distributed表引擎需要和其他數(shù)據(jù)表引擎一起協(xié)同工作睹晒。
所以趟庄,一張分布式表底層會對應(yīng)多個本地分片數(shù)據(jù)表,由具體的分片表存儲數(shù)據(jù)伪很,分布式表與分片表是一對多的關(guān)系【http://www.reibang.com/p/3fbcc98a5021】
所以Distributed表引擎的定義形式如下
Distributed(cluster_name,database_name,table_name[,sharding_key])
各個參數(shù)的含義分別如下:
cluster_name:集群名稱戚啥,與集群配置中的自定義名稱相對應(yīng)。
database_name:數(shù)據(jù)庫名稱
table_name:表名稱
sharding_key:可選的锉试,用于分片的key值猫十,在數(shù)據(jù)寫入的過程中,分布式表會依據(jù)分片key的規(guī)則,將數(shù)據(jù)分布到各個節(jié)點的本地表拖云。