clickhouse查詢表現的更多秘密

2021-10-11 11:08:23 字數 2541 閱讀 1947

哈嘍,小夥伴們,承諾大家的clickhouse專欄系列開始了!博主也是一名入門者,踐行者&布道者。希望一方面記錄所思所為,另一方面把工作中實踐的一些東西拿來分享給廣大朋友,以饗讀者!才疏學淺,難免有誤!還望大家多多指正。最後希望這個專欄的文章能對大家有幫助。

在這裡我對clickhouse不做過多的介紹。你們關注他,一定也了解他。目前國內頭部大廠紛紛落地,僅位元組跳動集群規模已達千台。我一直在想這第一篇到底要先寫什麼,最後我決定,作為一款olap產品,查詢效能一定是使用者最關注的。所以這第一篇我們來聊聊查詢。

獲得好的查詢加速,我們可以從以下方面入手:

另外,我們還有一些要注意的地方:

索引型別名

最佳使用方式

minmax

資料最大最小範圍; 適用於像時間戳這樣的強區域性性的數字型別

set唯一值

ngrambf_v1

presence of character ngrams, works with =, like, search predicates; 適用於長字串

tokenbf_v1

類似於ngram,但用於空格間隔的字串;適用於標籤查詢

bloomfilter

列中的值

這裡給大家隆重推薦lowcardinality(string)。該特性用字典編碼的值,即將string對映到字典索引(字串被編碼為position-可以理解為索引,並通過position-to-string的對映引用字典。使用該特性後,可以極大地減少資料儲存大小。後邊我會再寫博文給大家展示使用這個特性後的效能測試對比。

另外,codec(doubledelta),可用於任何等寬的資料型別。尤其是時間戳型別。

create

table codec_example_table

( eventtime datetime codec(doubledelta)

, price float32 codec(gorilla)

)engine

= mergetree(

)

這裡查詢效率提公升是因為更少的i/o,好的編碼方式可以有效減少i/o處理的資料大小。

編碼方式

最適用於

lowcardinality

不多於1萬個值的字串(低基數的),且字串長度越長,效果提公升越好

delta

時間序列

doubledelta

增長的計數

gorilla

gauge data (bounces around mean)

t64除去隨機雜湊的整型

注:可以使用zstd或者lz4等來壓縮

工作中,我們可以使用system.columns檢視資料大小,如下:

select

table

,formatreadablesize(

sum(data_compressed_bytes)

) tc,

formatreadablesize(

sum(data_uncompressed_bytes)

) tu,

sum(data_compressed_bytes)

/sum

(data_uncompressed_bytes)

as ratio

from system.

columns

where

database

= currentdatabase(

)group

bytable

order

bytable

amplifying clickhouse capacity with multi-volume storage

clickhouse materialized views: the magic continues

strength in numbers: introduction to clickhouse cluster performance

performance analysis of clickhouse queries

【博主偷個懶,直接上英文】

在實際工作中,我們遇到了使用者使用了大量聚合查詢且以某個分割槽作為過濾條件的場景(後邊也會整理這方面的文章)。在4千萬記錄級別上,未優化前查詢效能始終在1秒以上。後邊我們採用了下面的小技巧(假設使用者使用id欄位聚合):

1.在分布式(distributedmergetree)表中用id做分片鍵;

2.在分片表(也叫本地表)中用id做order by

3.然後設定引數distributed_group_by_no_merge = 1

這個引數(預設為0)含義就是本地表做完聚合後,不再在分布式表中聚合所有資料。因此需要確保相同的id值出現在同乙個分片上(步驟1確保了這一點)。這樣在每個分片上做group by之後,在分布式表做資料彙總即可。從而提公升了查詢效能。

使用了這個技巧後,查詢耗時不到1秒,大概在700毫秒左右。

更多好文,敬請期待…

clickhouse與mysql查詢速度對比

執行命令 for s in seq 1987 2017 dofor m in seq 1 12 domwget done done 執行 clickhouse client進入clickhouse客戶端 建立表語句為 create table ontime year uint16,quarter u...

clickhouse的單機部署

clickhouse 全稱是click stream data warehouse,簡稱clickhouse。是乙個完全的列式資料庫,可以做到流批一體。1.入門安裝與啟動 yum install y curl 安裝curl,可以請求url鏈結,請求外網 curl s sudo bash 2 yum ...

clickhouse的使用教程

在檔案末尾新增 soft nofile 65536 hard nofile 65536 soft nproc 131072 hard nproc 131072 安裝依賴檔案 示例clickhouse client q show databases clickhouse client d system...