自從研究了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...