4 ClickHouse 啟動和關閉
4.1 通過系統命令
啟動
systemctl start clickhouse-server
關閉
systemctl stop clickhouse-server
重啟
systemctl restart clickhouse-server
4.2 通過原生命令
啟動
/etc/init.d/clickhouse-server start
關閉
/etc/init.d/clickhouse-server stop
重啟
/etc/init.d/clickhouse-server stop
5 登錄方法
5.1 用clickhouse-client登錄本地服務器
clickhouse-client -h 127.0.0.1 --port 9000 -u default -d default --ask-password
下面解釋這些參數的含義:
-h 127.0.0.1 表示連接到本地
--port 9000是表示 clickhouse接收TPC/IP連接的端口是9000;
-u default 表示用戶名是 default;
-d default 表示連接到的數據庫的名稱是 default;
我們推薦用putty或 XShell來訪問linux 客戶端。
注意BUG:用SecureCRT 訪問會出錯。例如:
輸入“alter”,會顯示成下面這樣:
5.2 用圖形化客戶端
dbeaver 提供了連接 clickhouse 的能力。它在連接clickhouse 服務端時會自動下載需要的驅動。
如圖所示,是一個連接的配置。注意clickhouse jdbc 是基於 HTTP協議的,而clickhouse接受HTTP連接的端口是8123。
6 常用 sql 語句
ClickHouse與MySQL語法相似。這里列出一些常用的sql 語句。參見官方手冊的章節statement。
6.1 創建
這一節的內容來自官方手冊中的Create Queries.
6.1.1 創建數據庫
基本語法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
ClickHouse 的引擎(ENGINE)有這些:
1. 默認引擎
默認情況下,ClickHouse使用自身的數據庫引擎,該引擎可以提供表引擎配置( table engines )和SQL(SQL dialect.)
2. MySQL引擎
允許連接到遠程MySQL服務器上的數據庫,並執行INSERT和SELECT查詢以在ClickHouse和MySQL之間交換數據。
創建數據庫語法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
3. Lazy引擎
在最后一次訪問之后,僅在expiration_time_in_seconds秒內將表保留在RAM中。只有Log引擎的表可以使用。
該引擎針對存儲很多小型Log引擎表的情況進行了優化。因為對於這些表而言,兩次訪問之間的時間間隔很長。
創建數據庫語法:
CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);
6.1.2 創建表
基本語法:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
...
) ENGINE = engine;
ClickHouse 的表的引擎很多,在第7章會詳細介紹。
6.1.3 創建視圖
創建普通視圖:
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] AS SELECT ...
創建物化視圖:
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...
6.1.4 創建用戶
基本語法:
CREATE USER [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]
[
IDENTIFIED
[WITH
{NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}]
BY {'password'|'hash'}
]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[DEFAULT ROLE role [,...]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]
身份識別——identification
定義身份識別的方法有多種:
- IDENTIFIED WITH no_password
- IDENTIFIED WITH plaintext_password BY 'qwerty'
- IDENTIFIED WITH sha256_password BY 'qwerty' or IDENTIFIED BY 'password'
- IDENTIFIED WITH sha256_hash BY 'hash'
- IDENTIFIED WITH double_sha1_password BY 'qwerty'
- IDENTIFIED WITH double_sha1_hash BY 'hash'
注意,上面的 ‘qwerty’ 是明文密碼,而 ‘hash’ 是密碼被hash算法處理后的結果。
6.1.5 創建角色
基本語法:
CREATE ROLE [IF NOT EXISTS | OR REPLACE] name
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]
6.2 刪除
這一節的內容來自官方手冊中的DROP Statements
6.2.1 刪除數據庫
基本語法:
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
6.2.2 刪除表
基本語法:
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
6.2.3 刪除視圖
基本語法:
DROP VIEW [IF EXISTS] [db.]name [ON CLUSTER cluster]
6.2.4 刪除用戶
基本語法:
DROP USER [IF EXISTS] name [,...] [ON CLUSTER cluster_name]
6.2.5 刪除角色
基本語法:
DROP ROLE [IF EXISTS] name [,...] [ON CLUSTER cluster_name]
6.3 修改
這一節的內容來自官方手冊中的ALTER Statements
6.3.1 修改表的字段
基本語法:
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...
支持以下操作:
- ADD COLUMN —— 將新列添加到表中。
- DROP COLUMN —— 刪除列。
- CLEAR COLUMN —— 重置列值。
- COMMENT COLUMN ——在該列中添加文本注釋。
- MODIFY COLUMN——更改列的類型,默認表達式和TTL。
6.3.2 處理分區
基本語法:
ALTER TABLE [db].name [ON CLUSTER cluster] DETACH|DROP|ATTACH|ATTACH|REPLACE|MOVE|CLEAR COLUMN IN|CLEAR INDEX IN|FREEZE|FETCH|MOVE PARTITION ...
支持以下操作:
- DETACH PARTITION —將分區移動到detached目錄並忘記它。
- DROP PARTITION —刪除分區。
- ATTACH PART | PARTITION —將detached目錄中的零件或分區添加到表中。
- ATTACH PARTITION FROM —將數據分區從一個表復制到另一個表並添加。
- REPLACE PARTITION —將數據分區從一個表復制到另一個表並進行替換。
- MOVE PARTITION TO TABLE—將數據分區從一個表移動到另一個表。
- CLEAR COLUMN IN PARTITION—重置分區中指定列的值。
- CLEAR INDEX IN PARTITION —重置分區中的指定二級索引。
- FREEZE PARTITION —創建分區的備份。
- FETCH PARTITION —從另一台服務器下載分區。
- MOVE PARTITION | PART —將分區/數據部分移動到另一個磁盤或卷。
在8.1節有這些命令的使用案例。
下面我們詳細解釋這些命令:
ATTACH PART | PARTITION
語法:
ALTER TABLE table_name DETACH PARTITION|PART partition_expr
將指定分區的所有數據移動到detached目錄中。服務器會忘記分離的數據分區,就好像它不存在一樣。在您進行ATTACH查詢之前,服務器將不知道此數據。
例如:
ALTER TABLE mt DETACH PARTITION '2020-11-21';
ALTER TABLE mt DETACH PART 'all_2_2_0';
可以在如何指定分區表達式一節中閱讀有關設置分區表達式的更多信息。
執行上述查詢后,您可以對detached目錄中的數據執行任何操作-將其從文件系統中刪除,或將其保留。
此查詢已復制–將數據移動到detached所有副本上的目錄中。請注意,你只能在領導者副本上執行此查詢。若要確定副本是否為領導者,請查詢system.replicas。
DROP PARTITION|PART
語法:
ALTER TABLE table_name DROP PARTITION|PART partition_expr
從表中刪除指定的分區。該查詢將分區標記為非活動狀態,並大約在10分鍾內完全刪除數據。
可以在如何指定分區表達式一節中閱讀有關設置分區表達式的更多信息。
語法:
ALTER TABLE mt DROP PARTITION '2020-11-21';
ALTER TABLE mt DROP PART 'all_4_4_0';
從detached的分區中刪除指定分區或所有分區。
可以在如何指定分區表達式一節中閱讀有關設置分區表達式的更多信息。
ATTACH PARTITION|PART
語法:
ALTER TABLE table_name ATTACH PARTITION|PART partition_expr
從detached目錄將數據添加到表中。可以為整個分區或單獨的部分添加數據。例子:
ALTER TABLE visits ATTACH PARTITION 201901;
ALTER TABLE visits ATTACH PART 201901_2_2_0;
在“如何指定分區表達式”一節中閱讀有關設置分區表達式的更多信息。
此查詢被復制。復制啟動器檢查detached目錄中是否有數據。如果數據存在,查詢將檢查其完整性。如果一切正確,則查詢會將數據添加到表中。所有其他副本都從副本啟動器下載數據。
因此,您可以將數據detached放在一個副本上的目錄中,然后使用ALTER ... ATTACH查詢將其添加到所有副本上的表中。
ATTACH PARTITION FROM
語法:
ALTER TABLE table2 ATTACH PARTITION partition_expr FROM table1
此查詢從復制數據分區,table1以table2將數據添加到中存在的數據table2。請注意,不會從中刪除數據table1。
為了使查詢成功運行,必須滿足以下條件:
兩個表必須具有相同的結構。
兩個表必須具有相同的分區鍵。
REPLACE PARTITION
語法:
ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1
此查詢將的數據分區從復制table1到,table2並替換中的現有分區table2。請注意,不會從中刪除數據table1。
為了使查詢成功運行,必須滿足以下條件:
兩個表必須具有相同的結構。
兩個表必須具有相同的分區鍵。
MOVE PARTITION TO TABLE
語法:
ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest
此查詢將數據分區從table_source移至table_dest,並從table_source中刪除這些數據。
為了使查詢成功運行,必須滿足以下條件:
兩個表必須具有相同的結構。
兩個表必須具有相同的分區鍵。
兩個表都必須是相同的引擎系列(已復制或未復制)。
兩個表必須具有相同的存儲策略。
CLEAR COLUMN IN PARTITION
語法:
ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr
重置分區中指定列中的所有值。如果DEFAULT子句在創建表時已確定,則此查詢會將列值設置為指定的默認值。
例如:
ALTER TABLE visits CLEAR COLUMN hour in PARTITION 201902;
FREEZE PARTITION:
ALTER TABLE table_name FREEZE [PARTITION partition_expr]
該查詢創建指定分區的本地備份(凍結並不影響分區的使用)。如果PARTITION省略該子句,則查詢將立即創建所有分區的備份。
6.3.3 刪除數據
ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr
刪除與指定過濾表達式匹配的數據。
6.3.4 修改表中數據
修改數據在OLAP數據庫中通常是不受歡迎的。ClickHouse也不例外。像其他一些OLAP產品一樣,ClickHouse最初甚至不支持更新。后來,更新被ClickHouse支持了,但也是異步的,這使得它們很難在交互式應用程序中使用。因此不建議在應用中使用clickhouse的更新功能。
語法:
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr
操作與指定表達式匹配的數據。
6.4 查看各項系統信息
ClickHouse 的系統表位於 system 數據庫中。下列列舉常用的系統表。
6.4.1 查看分布式集群信息
select * from system.clusters;
6.4.2 查看數據庫版本信息等
select * from system.build_options;
6.4.3 查看有哪些進程
select * from system.processes;
6.4.4 查看有哪些表
select * from system.tables;
6.4.5 查看有哪些用戶
select * from system.users;