BigQuery COUNT(DISTINCT值)vs COUNT(值)

时间:2013-05-17 12:36:05

标签: google-bigquery

我在bigquery中发现了一个小故障/错误。 我们得到了一张基于银行统计数据的表格 starschema.net:clouddb:bank.Banks_token

如果我运行以下查询:

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

我得到以下结果:

Row totalrow    bankidcnt    
1   9513    9903    

我的问题是,如果我有9513row,我怎么能得到9903row,这比表中的rowcount多390个。

2 个答案:

答案 0 :(得分:33)

在BigQuery中,COUNT DISTINCT是所有大于1000的结果的统计近似值。

您可以提供可选的第二个参数,以给出使用近似值的阈值。因此,如果在示例中使用COUNT(DISTINCT BankId,10000),则应该看到确切的结果(因为实际的行数小于10000)。但请注意,在性能方面使用较大的阈值可能会很昂贵。

请参阅此处的完整文档: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


2017年更新:

使用BigQuery #standardSQL COUNT(DISTINCT)总是准确的。对于近似结果,请使用APPROX_COUNT_DISTINCT()。为什么有人会使用大约结果? See this article

答案 1 :(得分:28)

我使用EXACT_COUNT_DISTINCT()作为获取确切唯一计数的方法。它比COUNT(DISTINCT值,n> numRows)更清晰,更通用

在此处找到:linked question