2015-09-07 36 views
3

我一直覺得,如果您在某一列上執行COUNT(DISTINCT xyz),那麼它將等於GROUP BY該列的常規計數。BigQuery count distinct ColX不等於ColX組的計數

然而,當我這樣做了BigQuery中的一個非常大的數據集,具有完全相同的條件下,它顯示在結果的較大差異:

Query Type    Count 
---------------------------------- 
- count(distinct ColX) > 7 million 
- count(ColX) 
    ... GROUP BY ColX ~ 6.5 million 

這是爲什麼?我認爲在列中計算唯一值的這兩個不同版本應該返回相同的計數結果是錯誤的嗎?

回答

6

如果使用DISTINCT關鍵字,該函數將返回指定字段的不同值的數量。 請注意,DISTINCT的返回值是一個統計近似值,並且不能保證準確 - 文檔也清楚地表明瞭這一點。

如果您需要來自COUNT(DISTINCT)的更高準確度,則可以指定第二個參數n,該參數給出低於該閾值的確切結果。默認情況下,n是1000,但如果給出更大的n,則會得到COUNT(DISTINCT)的精確結果,直到該值爲n。但是,給出更大的n值會降低此運算符的可伸縮性,並可能大幅增加查詢執行時間或導致查詢失敗。

要計算不同值的確切數量,請使用EXACT_COUNT_DISTINCT。或者,對於更具擴展性的方法,請考慮在相關字段上使用GROUP BY,然後應用COUNT(*)。 GROUP BY方法更具可擴展性,但可能會產生輕微的前期性能損失。

https://cloud.google.com/bigquery/query-reference#aggfunctions

+1

非常有意義。對所有使用該數據庫的數據庫,「DISTINCT」是一個統計近似值?或者這只是一個大問題? – Kristian

+2

只是一個BigQuery的東西。 – Pentium10