我在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个。
答案 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