五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

CK SQL常用優(yōu)化 一 COUNTD 優(yōu)化

2023-08-10 03:15 作者:小倉朝qaq日  | 我要投稿

????????在迭代速度較快業(yè)務(wù)中,為了擴(kuò)展性,有很多情況下數(shù)倉會(huì)直接交付明細(xì)表,這時(shí)就需要查詢時(shí)進(jìn)行聚合,而COUNTD無疑是最耗時(shí)的常用聚合方式。

????????我們知道ClickHouse是一個(gè)分布式數(shù)據(jù)庫,由若干個(gè)分片組成。而我們進(jìn)行去重計(jì)算時(shí),最終會(huì)將數(shù)據(jù)聚合到某個(gè)節(jié)點(diǎn)進(jìn)行計(jì)算,這會(huì)產(chǎn)生兩個(gè)問題。一個(gè)是負(fù)載均衡問題,一個(gè)是網(wǎng)絡(luò)傳輸問題,在分片數(shù)較少時(shí)問題不大(在前司時(shí),看到很多私有化部署環(huán)境只有1/2個(gè)分片),而在分片數(shù)較多時(shí)會(huì)消耗大量時(shí)間。在數(shù)據(jù)準(zhǔn)確性不敏感的情況下,一般會(huì)使用非精確去重比如uniqCombined 等,而在數(shù)據(jù)比較敏感的情況下,我們會(huì)不得不使用count distinct。有沒有什么辦法能讓我們的countd性能與直接使用uniqCombined接近甚至超過呢?這就需要在建表以及查詢時(shí)進(jìn)行一些處理。

????????假如我們?cè)诓橐粡埫骷?xì)表,比如一個(gè)uv字段,我們需要計(jì)算count(distinct userId),表中有包含userid的明細(xì)數(shù)據(jù)。這時(shí)我們可以在建CK表時(shí),選擇userId為分片鍵,進(jìn)行建表。在查詢時(shí),我們將該count(distinct userId)進(jìn)行下推,在local表中進(jìn)行去重,去重后相加。不同公司的CK引擎都有自己的團(tuán)隊(duì)(比如字節(jié)跳動(dòng)有4個(gè)CK團(tuán)隊(duì),互不兼容),這個(gè)下推SQL的具體格式不確定,大概會(huì)長(zhǎng)這樣 select sum(innerM1)?from cluster(default,view(select count(distinct userId) as innerM1 from table_local)) 。對(duì)應(yīng)之前提到過countd性能差的原因,現(xiàn)在我們不需要跨分片去重,減少了大量數(shù)據(jù)傳輸?shù)臅r(shí)間,也不需要集中在某一臺(tái)機(jī)器中進(jìn)行大量數(shù)據(jù)的去重,減少了負(fù)載均衡帶來的問題。在我當(dāng)前的業(yè)務(wù)場(chǎng)景中,120個(gè)分片,這個(gè)優(yōu)化會(huì)提升查詢速度近百倍。

????在應(yīng)用該方法時(shí)需要注意,在查詢多個(gè)分區(qū)數(shù)據(jù)時(shí),是存在不同分片持有不同分區(qū)數(shù)據(jù)的情況的,因此使用該優(yōu)化時(shí)我們需要指定分區(qū)(對(duì)應(yīng)全量表)或者對(duì)按分區(qū)進(jìn)行聚合(對(duì)應(yīng)業(yè)務(wù)中按天聚合),萬幸是實(shí)際使用中正常的PM只會(huì)提出這兩種類型的需求。

????常見問題:

????1. 假如有兩個(gè)字段都需要countd怎么辦?

??????????????答:建兩張表

? ? 2. 假如一定需要對(duì)某字段跨分區(qū)去重怎么辦?

??????????????答:讓數(shù)倉建聚合表/說服PM

? ? 3.?假如一定一定需要對(duì)某字段跨分區(qū)去重怎么辦?、

????????????? 答: 下推后group by userId然后聚合,盡量減少負(fù)載均衡的問題。



CK SQL常用優(yōu)化 一 COUNTD 優(yōu)化的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
大兴区| 方正县| 峡江县| 贡嘎县| 望江县| 江油市| 博兴县| 新龙县| 张北县| 达日县| 襄垣县| 阿坝| 新密市| 嘉义县| 喀喇沁旗| 荔波县| 呼图壁县| 会泽县| 莲花县| 遂昌县| 田阳县| 景德镇市| 广东省| 南宁市| 安顺市| 迁西县| 澎湖县| 贵阳市| 庆安县| 丹阳市| 河东区| 库伦旗| 太仓市| 昌黎县| 南昌市| 沙雅县| 恭城| 三亚市| 安福县| 长宁县| 依兰县|