28

我在 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,这比表中的行数多 390row。

4

2 回答 2

48

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

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

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


2017 年更新:

使用 BigQuery #standardSQLCOUNT(DISTINCT)始终是准确的。对于近似结果,请使用APPROX_COUNT_DISTINCT(). 为什么有人会使用近似结果?见这篇文章

于 2013-05-19T03:40:06.097 回答
28

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

在这里找到:https ://cloud.google.com/bigquery/query-reference#aggfunctions

于 2015-05-22T22:34:20.950 回答