溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

clickhouse SQL優(yōu)化技巧有哪些

發(fā)布時(shí)間:2022-01-14 14:23:22 來(lái)源:億速云 閱讀:716 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹clickhouse SQL優(yōu)化技巧有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

sql慢查大部分主要體現(xiàn)在cpu 負(fù)載過(guò)高,io過(guò)高,或者查詢的列中無(wú)索引導(dǎo)致的;注意;clickhouse本身不太支持高并發(fā)的場(chǎng)景,qps過(guò)高會(huì)導(dǎo)致clickhouse服務(wù)器cpu過(guò)高,導(dǎo)致慢查

在這些情況下;常見的考慮的是 sql中是否有復(fù)雜的運(yùn)算,查詢的數(shù)量量是否過(guò)大,查詢的列中索引是否有效;

sql 查詢特點(diǎn):數(shù)量大,且分區(qū)跨度大

data表格中有8億多條數(shù)據(jù),data表按照p_data_day 分區(qū);

select sn,COUNT(1) as valueQt from data WHERE   sn='70A0600018109' and p_day >= '2017-01-01' and p_data_day < '2020-08-13'group by sn;

數(shù)據(jù)會(huì)遍歷整個(gè)分區(qū),數(shù)據(jù)平均在1s左右分鐘返回 ;

優(yōu)化思路:減少不必要數(shù)據(jù)的遍歷(分區(qū));充分利用clickhouse 索引(group by 索引)

針對(duì)sn的查詢,建立物化視圖;將8億條數(shù)據(jù)按照sn號(hào)以及device_id(mac_code)建立256個(gè)分區(qū);

create MATERIALIZED VIEW IF NOT EXISTS data_sn_materializedengine = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data_sn_materialized', '{replica}')PARTITION BY sn_sort_key ORDER BY (sn_sort_key,sn,p_day)AS select halfMD5(_sn) % 256 as sn_sort_key,sn,p_day,count() as cnt from data group by sn_sort_key,sn,p_day;

查詢語(yǔ)句;保持原來(lái)的出參和入?yún)⒉蛔?,?shù)據(jù)能夠在200ms以內(nèi)返回,

sql 查詢特點(diǎn):數(shù)量大,且分區(qū)跨度大

data 表格數(shù)據(jù)量在10億多條,建表語(yǔ)句如下

CREATE TABLE data (`data_day` Date, `flow_type` UInt32 DEFAULT CAST(0, 'UInt32'),.....) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data', '{replica}') PARTITION BY data_day ORDER BY (flow_type, data_day) SETTINGS index_granularity = 8192;

查詢語(yǔ)句

 
   
   
   select ... from data where data_day = '2020-09-11'
我們觀察到查詢數(shù)據(jù)的時(shí)候,總是會(huì)具體到昨天;而且歷史的數(shù)據(jù)不會(huì)再使用;  
優(yōu)化思路:使用clickhouse的TTL,減少表容量,
   
   
   
CREATE TABLE dwrt.lc_order_flow (    `data_day` Date,     .....     `flow_type` UInt32 DEFAULT CAST(0,     'UInt32'),    ....    ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data', '{replica}') PARTITION BY data_day ORDER BY (data_day, flow_type) TTL data_day + toIntervalDay(7) SETTINGS index_granularity = 8192;    
     

以上是“clickhouse SQL優(yōu)化技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI