天天看點

Apache Kylin權威指南1.3 Apache Kylin的工作原理

<b>1.3 apache kylin的工作原理</b>

<b></b>

apache kylin的工作原理本質上是molap(multidimensional online analytical processing)cube,也就是多元立方體分析。這是資料分析中相當經典的理論,在關系資料庫年代就已經有了廣泛的應用,下面将對其做簡要介紹。

1.3.1 次元和度量簡介

在說明molap cube之前需要先介紹一下次元(dimension)和度量(measure)這兩個

概念。

簡單來講,次元就是觀察資料的角度。比如電商的銷售資料,可以從時間的次元來觀察(如圖1-2的左側所示),也可以進一步細化,從時間和地區的次元來觀察(如圖1-2的右側所示)。次元一般是一組離散的值,比如時間次元上的每一個獨立的日期,或者商品次元上的每一件獨立的商品。是以統計時可以把次元值相同的記錄聚合在一起,然後應用聚合函數做累加、平均、去重複計數等聚合計算。

圖1-2 次元和度量的例子

度量就是被聚合的統計值,也是聚合運算的結果,它一般是連續的值,如圖1-2中的銷售額,抑或是銷售商品的總件數。通過比較和測算度量,分析師可以對資料進行評估,比如今年的銷售額相比去年有多大的增長,增長的速度是否達到預期,不同商品類别的增長比例是否合理等。

1.3.2 cube和cuboid

有了次元和度量,一個資料表或資料模型上的所有字段就可以分類了,它們要麼是次元,要麼是度量(可以被聚合)。于是就有了根據次元和度量做預計算的cube理論。

給定一個資料模型,我們可以對其上的所有次元進行組合。對于n個次元來說,組合的所有可能性共有2n種。對于每一種次元的組合,将度量做聚合運算,然後将運算的結果儲存為一個物化視圖,稱為cuboid。所有次元組合的cuboid作為一個整體,被稱為cube。是以簡單來說,一個cube就是許多按次元聚合的物化視圖的集合。

下面來列舉一個具體的例子。假定有一個電商的銷售資料集,其中次元包括時間(time)、商品(item)、地點(location)和供應商(supplier),度量為銷售額(gmv)。那麼所有次元的組合就有24=16種(如圖1-3所示),比如一次元(1d)的組合有[time]、[item]、[location]、[supplier]4種;二次元(2d)的組合有[time, item]、[time, location]、[time、supplier]、[item, location]、[item, supplier]、[location, supplier]6種;三次元(3d)的組合也有4種;最後零次元(0d)和四次元(4d)的組合各有1種,總共就有16種組合。

圖1-3 一個四維cube的例子

計算cuboid,即按次元來聚合銷售額。如果用sql語句來表達計算cuboid [time, loca-tion],那麼sql語句如下:

select time, location, sum(gmv) as gmv from sales group by time, location

将計算的結果儲存為物化視圖,所有cuboid物化視圖的總稱就是cube。

1.3.3 工作原理

apache kylin的工作原理就是對資料模型做cube預計算,并利用計算的結果加速查詢,具體工作過程如下。

1)指定資料模型,定義次元和度量。

2)預計算cube,計算所有cuboid并儲存為物化視圖。

3)執行查詢時,讀取cuboid,運算,産生查詢結果。

由于kylin的查詢過程不會掃描原始記錄,而是通過預計算預先完成表的關聯、聚合等複雜運算,并利用預計算的結果來執行查詢,是以相比非預計算的查詢技術,其速度一般要快一到兩個數量級,并且這點在超大的資料集上優勢更明顯。當資料集達到千億乃至萬億級别時,kylin的速度甚至可以超越其他非預計算技術1000倍以上。