【问题标题】:BigQuery COUNT(DISTINCT value) vs COUNT(value)BigQuery COUNT(DISTINCT 值)与 COUNT(值)
【发布时间】:2013-05-12 15:10:25
【问题描述】:

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

如果我运行以下查询:

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

我得到以下结果:

Row totalrow    bankidcnt    
1   9513    9903    

我的问题是,如果我有 9513 行,我怎么能得到 9903 行,比表中的行数多 390 行。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

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

    【讨论】:

    • ¿ 在标准中使用 count 与 APPROX_COUNT_DISTINCT 相比,成本仍然更大?或者功能优化了
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2019-09-16
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2021-10-15
    相关资源
    最近更新 更多