ClickHouse副本表和分布式表 您所在的位置:网站首页 怎么样建立表格副本 ClickHouse副本表和分布式表

ClickHouse副本表和分布式表

2023-07-14 11:52| 来源: 网络整理| 查看: 265

1.在集群的每个机器上面建立本地表 1)方式一:在集群每台机器上运行代码

CREATE TABLE st_center.st_pc_office_all_user_retention_v1 ( `apptypeid` String, `qid` String, `os` String, `ver` String, `type` String, `user_type` String, `install_day` UInt64, `dau` UInt64, `day1_dau` UInt64, `day2_dau` UInt64, `day3_dau` UInt64, `dt` String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{table}', '{replica}') PARTITION BY dt ORDER BY (dt, qid, ver, os, type, user_type, apptypeid) SETTINGS index_granularity = 8192;

2)方式二:一次性在集群每个机器上建立本地表

CREATE TABLE IF NOT EXISTS st_center.st_pc_office_all_user_retention_v1 ON CLUSTER default_cluster ( ... ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{table}', '{replica}') PARTITION BY dt ORDER BY (dt, qid, ver, os, type, user_type, apptypeid) SETTINGS index_granularity = 8192;

关键词:ON CLUSTER

[1] /clickhouse/tables/是一般性前缀[2] {layer}-{shard}是分片识别符,同一个分片内的所有机器应该保持相同[3] /clickhouse/tables/{shard}/{table}’, '{replica}'作为整体可以理解为表在zookeeper中的定位和识别符,因此每个表必须不同

2.在集群的每个机器上面建立分布式表 1)方式一:在集群的每台机器上运行代码

CREATE TABLE st_center.st_pc_office_all_user_retention_v1_dist ( `apptypeid` String, `qid` String, `os` String, `ver` String, `type` String, `user_type` String, `install_day` UInt64, `dau` UInt64, `day1_dau` UInt64, `day2_dau` UInt64, `day3_dau` UInt64, `dt` String ) ENGINE = Distributed('default_cluster', 'st_center', 'st_pc_office_all_user_retention_v1');

2)方式二:一次性在集群每个机器上建立分布式表

CREATE TABLE st_center.st_pc_office_all_user_retention_v1_dist as st_center.st_pc_office_all_user_retention_v1 ON CLUSTER default_cluster ENGINE = Distributed('default_cluster', 'st_center', 'st_pc_office_all_user_retention_v1');

注:Distributed表引擎后面依次是集群名、库名、表名、数据分配方式

关于分布式表我划重点如下:

分布式表本身并不存储数据,只是提供了一个可以分布式访问数据的框架,查询分布式表的时候clickhouse会自动去查询对应的每个本地表中的数据注意AS bank_replica,它表明了分布式表所对应的本地表(本地表是存储数据的)可以配置Distributed表引擎中的最后一个参数来设置数据条目的分配方式可以直接往分布式表中写数据,clickhouse会自动按照上一点所说的方式来分配数据和自平衡也可以自己写算法,然后往本地表中写数据(当然这个就比较高级了) 实操1:往112的本地表中插入数据 结论:只有同一分片112和171的本地数据会同步一致,其他的分片的副本表没有数据。但是分布式表数据各集群一致

112和171为同一个分片

112 :) select count(1) from test.apptype_appname_config_test1; SELECT count(1) FROM test.apptype_appname_config_test1 ┌─count(1)─┐ │ 131 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 112 :) select count(1) from test.apptype_appname_config_test1_dist; SELECT count(1) FROM test.apptype_appname_config_test1_dist ┌─count(1)─┐ │ 131 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec. 171 :) select count(1) from test.apptype_appname_config_test1 SELECT count(1) FROM test.apptype_appname_config_test1 ┌─count(1)─┐ │ 131 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 171 :) select count(1) from test.apptype_appname_config_test1_dist; SELECT count(1) FROM test.apptype_appname_config_test1_dist ┌─count(1)─┐ │ 131 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec.

别的分片:

143 :) select count(1) from test.apptype_appname_config_test1; SELECT count(1) FROM test.apptype_appname_config_test1 ┌─count(1)─┐ │ 0 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 143 :) select count(1) from test.apptype_appname_config_test1_dist; SELECT count(1) FROM test.apptype_appname_config_test1_dist ┌─count(1)─┐ │ 131 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec.

注:同一个分片,本地表是有数据,不同的分片只有分布式表有数据

实操2:往分布式表中插入数据 结论:往分布式表插入数据时,各集群副本表根据sharding_key写入数据 112机器: 112 :) select count(1) from test.apptype_appname_config_test2_dist; SELECT count(1) FROM test.apptype_appname_config_test2_dist ┌─count(1)─┐ │ 262 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec. 112 :) select count(1) from test.apptype_appname_config_test2; SELECT count(1) FROM test.apptype_appname_config_test2 ┌─count(1)─┐ │ 157 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 副本机器171: 171 :) select count(1) from test.apptype_appname_config_test2; SELECT count(1) FROM test.apptype_appname_config_test2 ┌─count(1)─┐ │ 157 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 171 :) select count(1) from test.apptype_appname_config_test2_dist; SELECT count(1) FROM test.apptype_appname_config_test2_dist ┌─count(1)─┐ │ 262 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec. 别的分片: 143 :) select count(1) from test.apptype_appname_config_test2; SELECT count(1) FROM test.apptype_appname_config_test2 ┌─count(1)─┐ │ 30 │ └──────────┘ 1 rows in set. Elapsed: 0.002 sec. 143 :) select count(1) from test.apptype_appname_config_test2_dist; SELECT count(1) FROM test.apptype_appname_config_test2_dist ┌─count(1)─┐ │ 262 │ └──────────┘ 1 rows in set. Elapsed: 0.005 sec.


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有