首页 文章

BigQuery COUNT(DISTINCT值)vs COUNT(值)

提问于
浏览
20

我在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 回答

  • 28

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

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

  • 32

    在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 .

相关问题