多維分析預匯總的功能盲區

發布時間:2019-02-28 分類:數據蔣堂

sjjt236png

在進一步討論如何在有限空間內實現多維分析的預匯總之前,我們有必要再了解一下預匯總方案還有什么功能上的不足,也就是要搞清還有什么查詢需求很可能無法通過預匯總數據獲取。

1. 非常規聚合

預匯總方案是將測度聚合值先計算好并存儲起來,那么,顯然,在預匯總階段沒有想到的測度聚合值就無法直接從預總匯的數據中查詢出來了。比如,如果我們只存儲了銷售額的合計值,而沒有存儲最大值,那就無法直接查詢出來了。

SQL 提供了五個最常見的聚合運算:計數、合計、平均、最大、最小。這幾種聚合值一般都會在預匯總階段被考慮到。但是,還有些太常規的聚合值,比如唯一計數(count distinct)、中位數、方差等,這些聚合值當然都有業務意義,也很可能被查詢到,但卻很容易被遺漏。這些聚合值也無法從其它聚合值簡單計算出來,未被預存儲時就只能臨時遍歷計算了。

理論上有無數中聚合運算,不可能都被想到。而聚合運算種類涉及得太多,又會使我們上次所說的容量問題變得更惡劣。

2. 組合聚合

聚合運算還可能組合。比如,原始 CUBE 的數據粒度是按天存儲的(即每天有一條記錄),而我們可能關心月平均銷售額,這個值的意思是將每天的銷售額按月合計后再求平均。它并不是單純的合計和平均,而是兩種聚合運算在不同維度層次上的組合。類似這種運算還有很多,比如月最大銷售額、地區人員收入中位數的均值、…。甚至有可能出現涉及三個或更多聚合運算組合的情況。

顯然,這些組合的聚合值是有業務意義的,但是常規的預匯總方案只會針對單一的聚合運算,一般不會考慮這種組合情況,也就不會事先預匯總了。即使在預匯總階段刻意考慮了組合情況,也還會發生容量過大的問題。一個有 30 個維度的 CUBE,按五種基本聚合運算來組合,只考慮兩組合的情況,理論上也會有 C(30,2)*5*4=8700 種情況,如果把這些值都預存儲起來,存儲空間就會再多幾個數量級。

3. 條件測度

測度在統計時還可能帶有條件。比如,我們想了解一下交易金額大于 100 元以上的訂單銷售額合計。

這個信息一般也無法在預匯總階段處理。我們只能預匯總銷售額,不能預匯總 100 元以上的銷售額,除非事先想到了這種可能的查詢,把大于 100 的銷售額先統計出來。這相當于新造了一個衍生測度:if(銷售額 >100, 銷售額,0)。但是,這里的 100 經常是個參數,在交互查詢階段才臨時輸入進來,這就不可能事先預匯總了。

條件維度還可能出現多個關聯的情況,比如統計銷售量超過 10 件的那些訂單的銷售額。不過導致的問題和處理方案也都是一樣的。

類似地,還可能有由測度臨時產生的維度。比如按年齡段統計平均收入,而年齡段的劃分規則是由參數傳遞進來的(如果是事先確定的分段規則,是真地可以先定義出一個維度出來)。

我們要再說“顯然”:這種條件測度(或臨時維度)的查詢是有業務意義的,甚至可以說是非常常見的,而預匯總方案對此卻無能為力。

條件測度還可能和組合聚合值混合出現,讀者可以自行腦補一些有業務意義的例子。

4. 時間段統計

時間是多維分析中特別重要的一種維度。一般的維度只能以枚舉(統計時針對某些特定的維度值)方式切片,而且時間維度卻很特殊,它即可以枚舉、也可以采用連續區間的方式來做切片。

我們可能關心兩個起止日期之間的統計值,比如 5 月 8 日到 6 月 12 日之間的銷售額合計,這個起止時間點也是查詢時作為參數傳遞進來的,具有很強的隨意性。

要再一次說“顯然”了:這種統計有很強很強的業務意義;而且,也再一次說,預匯總方案對此無能為力。

按維度的預匯總,要么針對每天,要么針對每個月,都是確定的維度(或其層次),而 5 月 8 日到 6 月 12 日這種區間則不是任何維度和層次能描述的。

仔細思考一下會發現,時間段統計也可以理解成是一種條件測度,但因為它太常見、而且工程上的實現方案(以后再講)也和條件測度不一樣,所以被我們單列出來了。

時間段統計還可能有多個組合關聯的情況,比如看看 5 月 8 日到 6 月 12 日間銷出的、生產日期在 1 月 9 日到 2 月 17 日之間的貨品總額。只考慮一個時間維度的區間,還可以一定程度地利用預匯總數據,基于中間 CUBE 去遍歷聚合。但如果涉及多個時間維區間組合查詢時,這個問題也會變得非常繁瑣,即使有預匯總數據也還會面臨多維度切片的問題,想要快速響應,不僅要冗余存儲按維度預匯總的數據,還可能需要有冗余多種排序方案。這些處理方法我們在后續再仔細研究。


多維分析預匯總方案的功能盲區,不僅僅在于我們常說的明細數據,而還有很多匯總信息也無法解決。采用預匯總用空間換時間,確實能一定程度地提高性能,但只能解決一小部分最簡單的需求,而且還面臨存儲量巨大的問題。把多維分析的效果寄希望于預匯總方案是很不靠譜的。要做好多維分析,硬遍歷的功夫是基本的,即使有了預匯總數據,也要在優秀的硬遍歷能力輔助下才能發揮更大的作用。

更多《數據蔣堂》文章
广西快乐十分