前言:
久聞 ClickHouse 大名,一直沒有去詳細瞭解。近期看了下 ClickHouse 相關文檔,決定安裝體驗下。想了解 ClickHouse 的小夥伴可以一起跟着學習哦。本篇文章主要介紹 ClickHouse 安裝方法及基礎知識。
1. ClickHouse 簡介
ClickHouse 是一個用於聯機分析 (OLAP) 的列式數據庫管理系統 (DBMS). 由俄羅斯搜索引擎巨頭 Yandex 開源. 主要用於數據分析領域, 目前國內社區火熱, 各個大廠紛紛跟進大規模用於 OLAP 領域。
一起來看下 ClickHouse 官網怎麼介紹它的一些特性:
- 快速:ClickHouse會充分利用所有可用的硬件,以儘可能快地處理每個查詢。單個查詢的峯值處理性能超過每秒 2 TB(解壓縮後,僅使用的列)。在分佈式設置中,讀取是在健康副本之間自動平衡的,以避免增加延遲。
- 容錯:ClickHouse支持多主機異步複製,並且可以跨多個數據中心進行部署。所有節點都相等,這可以避免出現單點故障。單個節點或整個數據中心的停機時間不會影響系統的讀寫可用性。
- 可伸縮:ClickHouse可以在垂直和水平方向上很好地縮放。 ClickHouse易於調整以在具有數百或數千個節點的羣集上或在單個服務器上,甚至在小型虛擬機上執行。當前,每個單節點安裝的數據量超過數萬億行或數百兆兆字節。
- 易用:ClickHouse簡單易用,開箱即用。它簡化了所有數據處理:將所有結構化數據吸收到系統中,並且立即可用於構建報告。 SQL允許表達期望的結果,而無需涉及某些DBMS中可以找到的任何自定義非標準API。
2. ClickHouse 安裝教程
ClickHouse 可以在任何具有 x86_64 ,AArch64 或 PowerPC64LE CPU 架構的 Linux ,FreeBSD 或 Mac OS X 上運行。貌似不能在 Windows 系統下安裝,不過 ClickHouse 同樣支持 Docker 部署,Windows 系統可以在 Docker 下安裝 ClickHouse 。
根據官方文檔推薦:Debian 或 Ubuntu 系統可以使用官方預編譯的 deb 軟件包來安裝,CentOS 、RedHat 等Linux發行版可以使用官方預編譯的 rpm 包 來安裝,如果您的操作系統不支持安裝 deb 或 rpm 包,也可以使用 tgz 軟件包或直接源碼編譯安裝。下面我們以 CentOS 系統爲例,以 rpm 方式來安裝下 ClickHouse。
# 查看系統版本
[root@localhost ~]# more /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# 檢測當前CPU是否支持SSE 4.2
[root@localhost ~]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported
# 添加官方存儲庫
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
# 安裝clickhouse
sudo yum install clickhouse-server clickhouse-client
# 啓動clickhouse
sudo /etc/init.d/clickhouse-server start
# 進入clickhouse客戶端
root@localhost ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) select 1;
SELECT 1
Query id: 42f5e589-2f81-44e2-9fb8-de45e682acfc
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.002 sec.
localhost :) select now();
SELECT now()
Query id: c4c867a9-ae0e-4d6c-bb19-057e96cf6624
┌───────────────now()─┐
│ 2021-01-13 10:19:14 │
└─────────────────────┘
1 rows in set. Elapsed: 0.004 sec.
3. ClickHouse 簡單操作
ClickHouse 支持有限的 SQL 操作,SQL 語法和傳統的關係型數據庫有相似之處。下面簡單介紹下 ClickHouse 基礎語法:
# 1.創建數據庫
# 語法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
# 示例:
[root@localhost ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) create database test;
CREATE DATABASE test
Query id: c17cbf32-ab8c-45a0-8ebb-a7b0bdb88efe
Ok.
0 rows in set. Elapsed: 0.015 sec.
localhost :) use test;
USE test
Query id: 4eeadf20-e8bc-4b84-a953-71cf16e133b6
Ok.
0 rows in set. Elapsed: 0.001 sec.
# 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
# 示例:
root@localhost ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) use test;
USE test
Query id: 37248a4f-36ec-4ed3-a08a-c345db228c98
Ok.
0 rows in set. Elapsed: 0.001 sec.
localhost :) create table t1 (id Int32,name String) engine=TinyLog;
CREATE TABLE t1
(
`id` Int32,
`name` String
)
ENGINE = TinyLog
Query id: 8296c170-72fa-4852-8447-ab548fa3b7b8
Ok.
0 rows in set. Elapsed: 0.230 sec.
localhost :) show tables;
SHOW TABLES
Query id: 7da8d2d5-e4ed-45f1-b96c-4d23924512ba
┌─name─┐
│ t1 │
└──────┘
1 rows in set. Elapsed: 0.007 sec.
# TinyLog是最簡單的表的引擎,用於將數據存儲在磁盤上。常用於小表。
# 3.插入數據
# 示例:
[root@localhost ~]# clickhouse-client
ClickHouse client version 20.12.5.14 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.12.5 revision 54442.
localhost :) use test;
USE test
Query id: 71a1de2a-17fe-4a0b-b9b6-7e934016892e
Ok.
0 rows in set. Elapsed: 0.001 sec.
localhost :) insert into t1 (id, name) values (1, 'abc'), (2, 'bbbb'),(3,'sdfg');
INSERT INTO t1 (id, name) VALUES
Query id: d4982851-8b52-4158-949f-fa94cd7d8ff3
Ok.
3 rows in set. Elapsed: 0.002 sec.
localhost :) select * from t1;
SELECT *
FROM t1
Query id: b73f366c-702e-4bda-b519-cb087754bbad
┌─id─┬─name─┐
│ 1 │ abc │
│ 2 │ bbbb │
│ 3 │ sdfg │
└────┴──────┘
3 rows in set. Elapsed: 0.002 sec.
雖然 SQL 語法和關係型數據庫有相似之處,但還是要摒棄已有的思維來學習 ClickHouse 。特別是數據類型、表引擎及其他特性,這些都是陌生的,學習下來還是有難度的。
參考: