乙個關於kylin的疑惑

2021-08-10 01:45:06 字數 1612 閱讀 6911

自從研究了kylin這個系統之後,就一直有乙個疑惑,那就是kylin針對某一特定查詢條件建立的cube,只能在這個條件下查詢預計算的結果,如果條件一旦換了,cube就廢了。帶著這個疑問我在很多技術群裡和別人討論和爭辯,都沒有結果。看了很多網上分析的文章,都沒有關於這個疑問的詳細解答,於是今天自己試著寫了一下cube,發現了一點點東西,總結一下,分享出來。

id age salary

1 28 300

1 28 300

2 30 320

1 29 310

2 30 320

3 33 350

3 32 340

假設有以上的表employee,有3個字段,分別為id,age,salary,現在對這個表建立cube,其中度量為sum(salary),維度為id,where條件為age>30,查詢語句如下:

select

sum(salary),id from employee where age >= 30

group

by id

建立的cube只有乙個,即:

id sum(salary)

2 640

3 690

那麼此時,如果查詢是:

select

sum(salary), id from employee where age < 30

group

by id

正確的查詢結果是:

id sum(salary)

1 910

那麼顯然這樣乙個查詢結果在上邊的cube中指沒有的,如果查詢是:

select

sum(salary), id from employee where age >32

group

by id

正確的查詢結果是:

id sum(salary)

3 350

那麼顯然,在上述的cube中也是查詢不出來的。

究其原因,是因為在建立的cube中已經沒有了age欄位,已經無法通過age字段區做過濾。

那麼如果在維度欄位中增加age,會是什麼情況呢?

現在把建立cube的唯獨字段增加乙個age欄位後,查詢語句如下:

select

sum(salary), id, age from employee where age > 29

group

by id,age

構建出的cube有3個,分別是

id sum(salary)

1 310

2 640

3 690

age sum(salary)

30 640

32 340

33 350

id age sum(salary)

2 30 640

3 32 340

3 33 350

那麼如果這時要以任意的age>29為條件進行查詢,都是可以從cube3中查詢的,例如age>30的查詢,聚合cube3的最後兩行即可。但是如果要查詢的是age<29,那麼顯然,從上述3個cube中都查詢不出來。

乙個小疑惑

auto ply new playerchannel 看到這個我想到和new playerchannel 到底有啥區別 預設建構函式 只有當不提供任何建構函式,編譯器才會合成乙個預設建構函式,引數初始化取決於定義物件的位置 當提供乙個函式時就不會有預設建構函式 不管new playerchannel...

Metric Learning的乙個疑惑

我看的是liu yang的survey distance metric learning a comprehensive survey.裡面總結道,eric xing等把metric learning formulate成這樣乙個凸優化問題 begin min limits sum limits i...

乙個python3 6 3的疑惑

首先申明一下,我是個新手小白,在學習python的目錄操作時,遇到了乙個讓我疑惑的問題,希望有大佬能解釋一下其中的原理 感謝 獲取當前路徑 path os.getcwd 建立乙個字典 dict 遍歷路徑下的所有檔案 for root,dirs,files in os.walk path,topdow...