2013-05-17 119 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