背景
Count Distinct是SQL查詢中經常使用的聚合統計方式,用於計算非重複結果的數目。由於需要去除重複結果,Count Distinct的計算通常非常耗時。
以如下查詢爲例,Count Distinct的實現方式主要有兩種:
SELECT region, COUNT(DISTINCT userId) FROM orders GROUP BY region
- 對訂單表的數據按照region進行shuffle分區,在每個分區中使用一個類似HashTable的數據結構,存儲所有的非重複userId的值,最後統計所有key的數量。
- 對錶t的數據按照(region, userId)進行shuffle分區,第一步的結果即爲非重複的(region, userId)對,對於第一步的結果再按照region分區,統計每個分區中的Row數量。
第一種方式