【實時數倉】Day05-ClickHouse
一、ClickHouse入門
1、介紹
是一個開源的列式儲存資料庫(DBMS)
使用C++編寫
用於線上分析查詢(OLAP)
能夠使用SQL查詢實時生成分析資料報告
2、特點
(1)列式儲存
比較:
行式儲存適用於查詢某條記錄的資訊
列式儲存適用於查詢所有人的資訊
好處:
聚合、計數、求和等統計操作優
同列資料型別易選擇更優的壓縮演算法,提高了壓縮比重
節省儲存空間並利於快取
(2)DBMS的功能
標準SQL大部分語法,DDM、DML、函式、使用者管理、許可權管理、資料備份與恢復
(3)引擎多樣化
根據需求可以選擇不同的引擎,例如合併樹、日誌、介面和其他四大類共二十多種引擎。
(4)高吞吐寫入能力
採用類似LSM Tree的結構,資料寫入後語在後臺壓縮
匯入時資料append寫,壓縮時也是順序寫回磁碟
順序寫充分利用了磁碟吞吐能力
能夠達到相當於 50W-200W 條/s 的寫入速度
(5)資料分割槽與執行緒級並行
劃分為多個partition,partition又被分為多個index索引粒度,多個核心各處理一部分實現並行處理
單條查詢就能充分利用所有CPU
但不適合多條查詢,不適用於高qps的查詢業務
二、ClickHouse的安裝
1、準備工作
關閉防火牆
取消開啟檔案數限制
同步操作
安裝依賴
取消SELINUX(偽檔案系統,是一個許可權白名單原則)
2、單機安裝
建立目錄
同步安裝檔案
安裝所有的rpm檔案:sudo rpm -ivh *.rpm |sudo rpm -qa|grep clickhouse
修改配置檔案中的listen_host,讓其他伺服器訪問,並分發配置檔案
啟動server:systemctl start clickhouse-server
關閉開機自啟:systemctl disable clickhouse-server
client連線:clickhouse-client -m
三、資料型別
1、整型
Int8、16、32、64
UInt8、16、32、64
場景:個數、數量、id
2、浮點型
Float32、64
計算時會引起四捨五入誤差
場景:資料值小、不涉及統計運算、精度要求不高
3、布林型
無專門型別,可以使用UInt8,取值為0/1
4、Decimal型別
可以保持精度的有符號浮點數
Decimal32(s)、64、128
s表示小數位數
場景:金額、利率等需要保證小數點精度的場景
5、字串
String:任意長度字串
FixString(N):固定長度字串,小於n會在末尾新增空位元組,較少使用
場景:名稱、文字描述
6、列舉型別
Enum8 和 Enum16
Enum8使用'String' = Int8對描述
例如建立一個列舉Enum8('hello' = 1, 'world' = 2) 型別的列
CREATE TABLE t_enum ( x Enum8('hello' = 1, 'world' = 2) ) ENGINE = TinyLog;
只能儲存hello或world
插入元素:INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');
轉換整形查詢:SELECT CAST(x, 'Int8') FROM t_enum;
場景:對於狀態欄位是一種空間優化+資料約束
會存在維護成本或資料丟失的問題
7、時間型別
Date:年月日
Datetime:年月日時分秒
Datetime64:年月日時分秒亞秒,如20:50:10.66
8、陣列Array(T)
不推薦多維陣列
建立方式1-使用 array 函式:SELECT array(1, 2) AS x, toTypeName(x) ;
建立方式2-使用方括號:SELECT [1, 2] AS x, toTypeName(x);
四、表引擎
1、表引擎的概念
建立表時顯式宣告,名稱區分大小寫
決定如何儲存表的資料,包括
儲存方式和位置、在哪寫,在哪讀
如何支援哪些查詢
併發資料訪問
索引的使用
是否支援多執行緒
資料複製引數
2、TinyLog
3、Memory
4、MergeTree
5、ReplacingMergeTree
6、SummingMergeTree
五、SQL操作
六、副本
七、分片叢集
本文來自部落格園,作者:哥們要飛,轉載請註明原文連結:https://www.cnblogs.com/liujinhui/p/15783759.html