閱識風雲是華為雲信息大咖,擅長將復雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。
摘要:在2016年開源的高性能、開源聯機分析列式數據庫管理系統。其數據壓縮比高,基於多核並行計算、向量化執行與SIMD,在性能上表現卓越。當前ClickHouse被廣泛的應用於互聯網廣告、App和Web流量、電信、金融、物聯網等眾多領域,非常適用於商業智能化應用場景,在國內外有大量的應用和實踐。
本文分享自華為雲社區《【雲小課】EI第22課 MRS基礎原理之ClickHouse組件介紹》,作者:閱識風雲
ClickHouse是一款開源的面向聯機分析處理的列式數據庫,其獨立於Hadoop大數據體系,最核心的特點是極致壓縮率和極速查詢性能。同時,ClickHouse支持SQL查詢,且查詢性能好,特別是基於大寬表的聚合分析查詢性能非常優異,比其他分析型數據庫速度快一個數量級。當前ClickHouse被廣泛的應用於互聯網廣告、App和Web流量、電信、金融、物聯網等眾多領域,非常適用於商業智能化應用場景,在國內外有大量的應用和實踐。
ClickHouse關鍵特性介紹
完備的DBMS功能
ClickHouse擁有完備的數據庫管理功能,具備一個DBMS(Database Management System,數據庫管理系統)基本的功能,如下所示:
DDL (數據定義語言):可以動態地創建、修改或刪除數據庫、表和視圖,而無須重啟服務。
DML(數據操作語言):可以動態查詢、插入、修改或刪除數據。
權限控制:可以按照用戶粒度設置數據庫或者表的操作權限,保障數據的安全性。
數據備份與恢復:提供了數據備份導出與導入恢復機制,滿足生產環境的要求。
分布式管理:提供集群模式,能夠自動管理多個數據庫節點。
列式存儲與數據壓縮
ClickHouse是一款使用列式存儲的數據庫,數據按列進行組織,屬於同一列的數據會被保存在一起,列與列之間也會由不同的文件分別保存。
在執行數據查詢時,列式存儲可以減少數據掃描范圍和數據傳輸時的大小,提高了數據查詢的效率。
向量化執行引擎
ClickHouse利用CPU的SIMD指令實現了向量化執行。SIMD的全稱是Single Instruction Multiple Data,即用單條指令操作多條數據,通過數據並行以提高性能的一種實現方式 ( 其他的還有指令級並行和線程級並行 ),它的原理是在CPU寄存器層面實現數據的並行操作,相比同類OLAP產品執行效率更高。
副本機制
ClickHouse利用ZooKeeper,通過ReplicatedMergeTree引擎(Replicated 系列引擎)實現了副本機制。副本機制是多主架構,可以將INSERT語句發送給任意一個副本,其余副本會進行數據的異步復制。
副本機制功能優勢如下:
ClickHouse副本機制的設計可以最大限度的減少網絡數據傳輸,用以在不同的數據中心進行同步,可以用來建設多數據中心、異地多活的集群架構。
副本機制是實現高可用、負載均衡、遷移/升級功能的基礎。
系統會監視副本數據的同步情況,識別故障節點,並在節點恢復正常時進行故障恢復,保證服務整體高可用。
數據分片與分布式查詢
ClickHouse通過分片和分布式表機制提供了線性擴展的能力。
分片機制:用來解決單節點的性能瓶頸,通過將數據進行水平切分,將一張表中的數據拆分到多個節點,不同節點之間的數據沒有重復,這樣就可以通過增加分片對ClickHouse進行線性擴展。
分布式表:在查詢分片的數據時,通過分布式表進行查詢,分布式表引擎自身不存儲任何數據,僅是一層代理,能夠自動路由到集群中的各個分片節點獲取數據,即分布式表需要和其他數據表一起協同工作。
如下圖所示,在查詢時,我們需要查詢分布式表 table_distributed,分布式表會將查詢請求自動路由到各個分片節點上,並進行結果的匯聚。
講了這么多,具體怎么使用ClickHouse呢?別急,以下通過ClickHouse客戶端使用和數據庫基本操作帶你快速上手。
操作前准備
- 已創建ClickHouse集群。
- 已安裝ClickHouse客戶端。
ClickHouse客戶端使用
1. 以客戶端安裝用戶,登錄安裝客戶端的節點。
2. 執行以下命令,切換到客戶端安裝目錄。以下目錄為舉例,具體客戶端路徑請以實際安裝路徑為准。
cd /opt/Bigdata/client
3. 執行以下命令配置環境變量。
source bigdata_env
4.執行ClickHouse組件的客戶端命令。
clickhouse client --host ClickHouse的實例IP --user 登錄名 --password 密碼 --port ClickHouse的端口號
clickhouse client命令行參數說明如下表所示:
ClickHouse數據庫基本操作
創建數據庫:
基本語法
CREATE DATABASE [IF NOT EXISTS] database_name
使用示例
創建表:
基本語法
方法一:在指定的“database_name”數據庫中創建一個名為“table_name ”的表。
如果建表語句中沒有包含“database_name”,則默認使用客戶端登錄時選擇的數據庫作為database_name”。
CREATE TABLE [IF NOT EXISTS] [database_name.]table_name [ON CLUSTER Cluster名]
(
name1 [type1] [DEFAULT|materialized|ALIAS expr1],
name2 [type2] [DEFAULT|materialized|ALIAS expr2],
...
) ENGINE = engine
方法二:創建一個與table_name2具有相同結構的表,同時可以對其指定不同的表引擎聲明。
如果沒有表引擎聲明,則創建的表將與database_name2.table_name2使用相同的表引擎。
CREATE TABLE [IF NOT EXISTS] [database_name.]table_name AS [database_name2.]table_name2 [ENGINE = engine]
方法三:使用指定的引擎創建一個與SELECT子句的結果具有相同結構的表,並使用SELECT子句的結果填充它。
CREATE TABLE [IF NOT EXISTS] [database_name.]table_name ENGINE = engine AS SELECT ...
使用示例
插入表數據:
基本語法
方法一:標准格式插入數據。
INSERT INTO [database_name.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
方法二:使用SELECT的結果寫入。
INSERT INTO [database_name.]table [(c1, c2, c3)] SELECT ...
使用示例
查詢表數據:
基本語法
SELECT [DISTINCT] expr_list
[FROM [database_name.]table | (subquery) | table_function] [FINAL]
[SAMPLE sample_coeff]
[ARRAY JOIN ...]
[GLOBAL] [ANY|ALL|ASOF] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER|SEMI|ANTI] JOIN (subquery)|table (ON <expr_list>)|(USING <column_list>)
[PREWHERE expr]
[WHERE expr]
[GROUP BY expr_list] [WITH TOTALS]
[HAVING expr]
[ORDER BY expr_list] [WITH FILL] [FROM expr] [TO expr] [STEP expr]
[LIMIT [offset_value, ]n BY columns]
[LIMIT [n, ]m] [WITH TIES]
[UNION ALL ...]
[INTO OUTFILE filename]
[FORMAT format]
使用示例
修改表結構:
基本語法
ALTER TABLE [database_name].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...
ALTER僅支持 *MergeTree ,Merge以及Distributed等引擎表。
使用示例
顯示數據庫和表信息
基本語法
show databases
show tables
使用示例
查詢表結構
基本語法
DESC|DESCRIBE TABLE [database_name.]table [INTO OUTFILE filename] [FORMAT format]
使用示例
刪除表:
基本語法
DROP [TEMPORARY] TABLE [IF EXISTS] [database_name.]name [ON CLUSTER cluster]
使用示例
好了,本期雲小課就介紹到這里,快去體驗MapReduce(MRS)更多功能吧!猛戳這里