命令行客戶端
更新時間 2023-12-20 18:54:19
最近更新時間: 2023-12-20 18:54:19
分享文章
本頁面介紹云數據庫ClickHouse如何通過命令行客戶端進行連接。
本節演示命令行客戶端通過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節點。

可以發現數據分布在不同的節點上。由此說明數據實際上保存在各個節點的本地表中,而分布式表可以看做一個視圖,將本地表的數據聯合起來。