本节演示命令行客户端通过TCP端口9000连接云数据库ClickHouse。
- 根据云数据库ClickHouse版本下载对应客户端。
- 使用下列命令连接集群。
clickhouse-client --host=<host> --port=<port> --user=<user> --password=<password>
参数说明:
host:集群节点ip地址。
port:host地址参数连接串上显示的端口号。
user:数据库用户名。
password:数据库用户密码。
更多详细的参数可以使用 clickhouse-client --help 查看。
- 示例。
以一个2节点的单副本集群为例,演示命令行客户端操作,示例集群节点信息如下:集群名inst_2shards_1replicas。
ClickHouse节点IP | TCP端口 | HTTP端口 | 分片(shard) | 副本数量 |
---|---|---|---|---|
A.A.A.207 | 9000 | 8123 | 1 | 1 |
A.A.A.208 | 9000 | 8123 | 2 | 1 |
- 连接命令行客户端。
clickhouse-client -h IP地址 --port TCP端口 -u 用户名 --password 密码
- 创建表。
集群模式下创建表分为两个步骤,第一步创建本地表,第二步是创建分布式表。如果只创建本地表而不创建分布式表,那么本地表的数据仅所在节点可见其它节点不可见。
- 创建本地表。
CREATE TABLE IF NOT EXISTS tutorial.events_local ON CLUSTER 'inst_2shards_1replicas' ( \
ts_date Date,\
ts_date_time DateTime,\
user_id Int64,\
event_type String,\
site_id Int64,\
groupon_id Int64,\
category_id Int64,\
merchandise_id Int64,\
search_text String\
)\
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/tutorial/events_local','{replica}')\
PARTITION BY ts_date\
ORDER BY(ts_date,toStartOfHour(ts_date_time),site_id,event_type)\
SETTINGS index_granularity = 8192;
其中,ON CLUSTER
语法表示分布式DDL,即执行一次就可在集群所有实例上创建同样的本地表。Tutorial
和 events_local
分别是数据库和本地表名,inst_2shards_1replicas
是集群名。ReplicatedMergeTree
是表引擎,PARTITION BY
指定分区键。 集群标识符{cluster}、分片标识符{shard}和副本标识符{replica}来自复制表宏配置,即配置文件中一节的内容,配合 ON CLUSTER
语法一同使用,可以避免建表时在每个实例上反复修改这些值。
- 创建分布式表。
CREATE TABLE IF NOT EXISTS tutorial.events_all ON CLUSTER ‘inst_2shards_1replicas’\
AS tutorial.events_local\
ENGINE = Distributed(inst_2shards_1replicas,tutorial,events_local,rand());
创建分布式表是读时检查的机制,也就是说对创建分布式表和本地表的顺序并没有强制要求。
- 插入数据。
insert into events_all (ts_date,ts_date_time,user_id,event_type,site_id,groupon_id,category_id,merchandise_id,search_text)values('2020-08-01','2020-08-01 09:30:01',10009,'event1',10,20,30,40,'search text');
insert into events_all (ts_date,ts_date_time,user_id,event_type,site_id,groupon_id,category_id,merchandise_id,search_text)values('2020-08-02','2020-08-02 09:30:01',10009,'event1',10,20,30,40,'search text');
insert into events_all (ts_date,ts_date_time,user_id,event_type,site_id,groupon_id,category_id,merchandise_id,search_text)values('2020-08-03','2020-08-02 09:30:01',10009,'event2',10,20,30,40,'search text');
insert into events_all (ts_date,ts_date_time,user_id,event_type,site_id,groupon_id,category_id,merchandise_id,search_text)values('2020-08-04','2020-08-03 10:30:01',10009,'event3',10,20,30,40,'search text');
insert into events_all (ts_date,ts_date_time,user_id,event_type,site_id,groupon_id,category_id,merchandise_id,search_text)values('2020-08-05','2020-08-04 11:30:01',10009,'event4',10,20,30,40,'search text');
- 查看分布式表。
- 查看本地表。
查看A.A.A.207节点。
查看A.A.A.208节点。
可以发现数据分布在不同的节点上。由此说明数据实际上保存在各个节点的本地表中,而分布式表可以看做一个视图,将本地表的数据联合起来。