2013-05-17 151 views
11

我在bigquery中發現了一個小故障/錯誤。 我們得到了基於下銀行統計數據表中的 starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT(DISTINCT值)與COUNT(值)

如果我運行下面的查詢:

SELECT count(*) as totalrow, 
count(DISTINCT BankId) as bankidcnt 
FROM bank.Banks_token; 

,我得到以下結果:

Row totalrow bankidcnt  
1 9513 9903  

我的問題是,如果我有9513row我怎麼能得到9903row,這比表中的rowcount多390row。

回答

21

BigQuery中,COUNT DISTINCT是所有結果大於1000

你可以提供一個可選的第二個參數給使用近似在該閾值的統計逼近。因此,如果在示例中使用COUNT(DISTINCT BankId,10000),則應該看到確切的結果(因爲實際的行數小於10000)。但請注意,使用較大的閾值在性能方面可能代價很高。

在這裏看到完整的文檔: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


UPDATE 2017年:

與BigQuery #standardSQL COUNT(DISTINCT)總是準確的。對於近似的結果使用APPROX_COUNT_DISTINCT()。爲什麼會有人使用近似結果? See this article

20

我已經使用EXACT_COUNT_DISTINCT()作爲獲取確切的唯一計數的方法。它比COUNT(DISTINCT值,n> numRows行)

發現這裏更清潔和更普遍的:https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

的EXACT_COUNT_DISTINCT()好像它僅僅是傳統的SQL的一部分(https://cloud.google.com/大量查詢/文檔/參考/遺留-SQL)。請仔細閱讀本文末尾的Steve Ganem筆記:https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk