<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          炸!撩下 OLAP 數(shù)據(jù)分析的黑馬神器 ClickHouse

          共 3806字,需瀏覽 8分鐘

           ·

          2021-02-16 02:08

          點(diǎn)擊藍(lán)色“有關(guān)SQL”關(guān)注我喲

          加個“星標(biāo)”,天天與10000人一起快樂成長

          圖 | Lenis


          互聯(lián)網(wǎng)兩大巨獸,西谷歌,東炎帝!

          谷歌我們都知道,全世界有名的搜索引擎公司。那么炎帝,是中國那個老祖宗-炎帝么?

          搞笑,當(dāng)然不是!

          炎帝是我硬翻的,英語 6 級,才疏學(xué)淺,不夠用。原詞是 Yandex, 俄羅斯的一家互聯(lián)網(wǎng)公司。做搜索業(yè)務(wù),與谷歌齊名。


          認(rèn)識這家公司,倒不是我要去俄羅斯宣傳 SQL. 而是這家公司做了款牛皮到炸天的 OLAP 分析工具 ClickHouse.

          ClickHouse = Click Stream + Data Warehouse

          這并不是我 YY 的單詞組合,炎帝(Yandex) , 就是這么宣傳的。


          說起 OLAP,容我賣下情懷,插播一段回憶。


          2008年時,昕姐(我媳婦兒)和我還在無錫華潤,做 SAP/R3 開發(fā)。

          公司活少,人好,周末活動緊湊,兩個人又都是不留錢的主,每月收入 5000 塊,悉數(shù)花個精光,小日子過得忘乎所以。

          也不知道昕姐哪天受了刺激,要求我開發(fā)一套家庭用的資產(chǎn)管理 MIS(management of information system).


          好歹我也會點(diǎn) VFP + SQL Server. 封閉式開發(fā)了一個周末,這套資產(chǎn)管理系統(tǒng)就出來了。

          現(xiàn)在想想,太特么幼稚了。5000塊,還資產(chǎn)管理,哈哈。

          當(dāng)時,卻覺得蠻好玩。還在昕姐面前漲了面兒。


          但,任何 MIS 投入使用,便開啟一個大坑。

          首先是界面美化。當(dāng)時,前端沒有那么火和騷,一個 FORM(表單)解決問題。調(diào)調(diào)背景色和線框樣式,也就過去了。

          最大的問題,來自數(shù)據(jù)分析。昕姐提出來兩個報(bào)表:

          • 每日消費(fèi)統(tǒng)計(jì)圖,并可以匯總成周/月/年的統(tǒng)計(jì)
          • 消費(fèi)明細(xì)統(tǒng)計(jì)圖,按照時間粒度做分計(jì)

          這兩個要求,讓當(dāng)時的我,觸摸到了 OLAP 的邊。

          你看,一個對象對 SQL BOY 的影響,就是這么大!

          一開始,用 vfp 編程, 在表單上劃線。折線圖非常硬,特別直男的那種。沒有一點(diǎn)柔和感,粗細(xì)不好調(diào)。數(shù)據(jù)一多,那鋸齒畫面,看得我一臉緊張。還沒昕姐在 excel 上做的好。

          于是想著,excel 2007 作圖居然這么好看,為什么不能用在 vfp 編程中呢。谷歌了下,發(fā)現(xiàn)一個終極難題,vfp9 終結(jié)了開發(fā),頂多與 excel 2003 集成。想要使用 excel2007 的 DLL庫,必須用 c#.

          好嘛,c# 就 c#, 反正經(jīng)過這么幾次折騰,我對 vfp 的前景,也看淡了很多。

          于是,買了兩本 c# 的書,趁著月黑風(fēng)高,苦戰(zhàn)了幾個星期。把表單控件,ado.net 編程也都摸了個遍。徹底把家庭資產(chǎn)管理系統(tǒng)改寫了。


          終于,報(bào)表像樣了,圖變得潤滑了,柱狀切餅圖,隨手也做掉了。我的腰板再一次硬起來了。

          原以為可以喘口氣了。誰知昕姐,笑盈盈地端來了一碗熱雞湯面,同時還端來了新一輪的需求。

          原來她想要的日消費(fèi)統(tǒng)計(jì)圖,是把所有的消費(fèi)記錄都拉出來。按照年一行行統(tǒng)計(jì)好,排列成柱狀圖。

          如果哪一年消費(fèi)有些高,可以點(diǎn)著那根柱狀圖,進(jìn)去看每個月,進(jìn)而可以找到哪一天,什么種類的消費(fèi)高了。

          天哪,這個腦洞怎么想出來的,肯定是那幫財(cái)務(wù)分子教她的!我就說嘛,找媳婦兒不能找財(cái)務(wù),哪怕沾點(diǎn)邊兒的,那個要求,細(xì)過出前一丁。

          我一口一口扒著面,一嘴一嘴的討價(jià)還價(jià),最終還是接了這個需求。


          于是,又是一通搜索,讓我知道了 sql server cube 和 excel pivot chart 這兩樣寶貝。

          cube 可以實(shí)現(xiàn)下鉆和上卷的功能,前提是按照維度和度量(組),預(yù)先生成一張大表。然后丟給 cube 服務(wù)器去跑數(shù)據(jù)。

          大致的 cube 架構(gòu)如下圖:


          excel pivot chart 則是承接 cube 來的數(shù)據(jù),完成可視化操作。


          如今這樣的可視化分析,到處都是,就連PowerBI,也大放異彩!

          當(dāng)把最終的產(chǎn)品給昕姐做展現(xiàn)的時候,雖然沒有得到她的極力夸獎,但我內(nèi)心卻異常激動。因?yàn)楹罄m(xù)的事情,老讀者們都知道了。這項(xiàng)新研究,我把它用到公司的MES軟件中,徹底改變了我在公司IT部門的地位,也讓我拿到了薪水翻3番的新工作。


          從現(xiàn)在的角度來看,當(dāng)時做的這些基礎(chǔ)的數(shù)據(jù)倉庫和BI工作,是十分初級和粗糙的。但對于大部分的制造業(yè)和服務(wù)業(yè)來說,基本上解決90%的數(shù)據(jù)統(tǒng)計(jì)問題,一點(diǎn)瓶頸都沒有。


          美中不足的,有以下3個方面:

          • 非實(shí)時
          • 維度暴漲
          • 極度呆滯

          非實(shí)時

          這個很好理解。類似 cube 這類預(yù)處理機(jī)制,本質(zhì)上是用空間換時間策略。把聚合的處理,放在了數(shù)據(jù)分析的前道處理工序上。

          就如同下面的建模,確定4個維度和1個度量,最后送入 Cube 服務(wù)器做處理:


          而這個預(yù)處理,非常耗時。首先需要確定維度和度量,經(jīng)過數(shù)據(jù)建模和ETL,把數(shù)據(jù)聚攏。預(yù)處理后,查詢速度極快。

          業(yè)界稱這種處理分析方式為 MOLAP, 即 Multidiemensional OLAP. 它需要一種特殊的數(shù)據(jù)庫服務(wù),就是聚合計(jì)算引擎。

          除了 sql server cube,還有 Oracle, IBM, MySQL 都提供類似的產(chǎn)品。大數(shù)據(jù)界也有類似的產(chǎn)品,Hive, SparkSQL, Impala, Kylin 等。這些大數(shù)據(jù)產(chǎn)品的實(shí)現(xiàn)原理,也基本都衍生于 ?MapReduce.

          維度暴漲

          前面說到 MOLAP 的本質(zhì)是預(yù)計(jì)算,針對特定維度組合,把預(yù)計(jì)算的統(tǒng)計(jì)值,存在數(shù)組里。等到分析時,根據(jù)維度組合索引,就能快速定位到具體的統(tǒng)計(jì)值。

          在下面的數(shù)據(jù)立方體(Cube)中,預(yù)先計(jì)算了聚合的值。立方體的每條邊,都視作一個維度。每個小碎格,代表了維度相交,聚合出來的度量值。立方體代表了3維,如果有更多維,則預(yù)處理會更加復(fù)雜。

          ?

          但是分析的時候,我們并不是每次都需要全部的維度。有時候僅需要其中2-3個維度,但是預(yù)處理引擎卻是要把所有維度的組合,都算進(jìn)來。

          假設(shè)有 n 個維度,需要組合計(jì)算的種類,就有 2^n 個。比如 10個維度,那么維度組合就有1024種,這會是個巨大無比的集合。

          顯然,這不僅浪費(fèi)資源,還容易拖累查詢速度。

          極度呆滯

          在數(shù)據(jù)被送入 cube 處理之前,需要對表結(jié)構(gòu)做特殊處理。這種處理方式,就是大家經(jīng)常聽到的維度建模。


          在 cube 引擎中,流淌的不是一行行數(shù)據(jù),而是一個個維度和基于這些維度組合附加的度量。這么說肯定很抽象,什么是維度,什么是度量?聽上去和表結(jié)構(gòu)似乎沒什么關(guān)系,初學(xué)者也很難搞清楚。

          再舉個栗子,就拿籃球運(yùn)動員奧尼爾來說,年齡,身高,帶球速度,就是他的維度;而打過多少場球賽,勝多少場,平多少場,輸多少場,就是他的度量。比如20歲,以216公分身高,147公斤體重,搶得籃板球2個,勝3場球賽。這樣一條記錄,可以為其建模為:


          age?height??weight??board_score?win_time
          20??216?????147?????2???????????3

          這樣一來,維度和度量,其實(shí)非常明確。年齡,身高,體重是維度,籃板個數(shù),勝負(fù)數(shù)是度量。

          數(shù)據(jù)被整理成這種格式后,就可以送入 cube 做處理。但,也因?yàn)槭沁@樣的預(yù)整理模式,束縛了 cube 的計(jì)算能力。

          我們要增加一維,比如教練,就需要重新整理數(shù)據(jù)表,而 cube 也需要重新做一次全處理,而不是增量處理。全處理,意味著需要把整張表掃描,根據(jù)維度組合,生成預(yù)聚合。

          很顯然,這樣的預(yù)處理,對于維度經(jīng)常變動的數(shù)據(jù),是沒有優(yōu)勢的,缺少靈活性。如今的互聯(lián)網(wǎng)形態(tài),每分鐘數(shù)據(jù)都有新的維度產(chǎn)生,因此cube的處理方式,變得力不從心。

          此時, 黑馬 Clickhouse 出場了。它帶著新型的處理方式,來了。他來了,她終于來了。

          它摒棄預(yù)處理方式,以實(shí)時維度組合,閃電般地計(jì)算聚合。增加維度,一維,兩維,三維,都不需要做任何延遲計(jì)算,在數(shù)據(jù)表生成的那一剎那,查詢既結(jié)果。它是真正的 ROLAP. 意味著,不需要多一層像 cube 一樣的多維數(shù)據(jù)庫引擎,來加快查詢速度。

          它解決了傳統(tǒng) cube 的所有缺點(diǎn)。

          以上的分享,靈感來自于這本書《ClickHouse原理解析與應(yīng)用實(shí)踐》。感謝機(jī)械工業(yè)出版社華章趙靜編輯的贈書。這是國內(nèi)第一本詳細(xì)介紹clickhouse的書,作者也是 clickhouse 代碼的貢獻(xiàn)者,非常值得一看。

          迫不及待,我已經(jīng)在春節(jié)期間,開始本次CH之旅。

          全書總共分為11章:


          第1章 介紹ClickHouse的由來、發(fā)展歷程、核心特點(diǎn)與核心特點(diǎn)。

          第2~6章 介紹了ClickHouse基礎(chǔ)使用部分,包括整體架構(gòu)、如何安裝、數(shù)據(jù)定義、數(shù)據(jù)引擎、數(shù)據(jù)查詢和函數(shù)的特性和使用方法。

          第7~9章介紹了ClickHouse高級特性部分,包括數(shù)據(jù)庫管理操作,數(shù)據(jù)分片、數(shù)據(jù)副本和高可用的特性和使用方法。

          第10~11章介紹了如果自己手動實(shí)現(xiàn)ClickHouse中間件的思路和示例,同時也介紹了幾款可視化工具與ClickHouse集成的方法。




          --完--





          往期精彩:


          本號精華合集(三)

          如何寫好 5000 行的 SQL 代碼

          如何提高閱讀 SQL 源代碼的快感

          我在面試數(shù)據(jù)庫工程師候選人時,常問的一些題

          零基礎(chǔ) SQL 數(shù)據(jù)庫小白,從入門到精通的學(xué)習(xí)路線與書單










          瀏覽 64
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级网址日本 | 18禁免费网站 | 无码尤物波多野结衣性开放∧V | 国产激情av在线观看 | 亚洲色婷婷网 |