Google bigquery BigQuery计数(不同值)与计数(值)

Google bigquery BigQuery计数(不同值)与计数(值),google-bigquery,Google Bigquery,我在bigquery中发现了一个小故障/bug。 我们得到了一个基于银行统计数据的表格 starschema.net:clouddb:bank.Banks\u令牌 如果我运行以下查询: SELECT count(*) as totalrow, count(DISTINCT BankId ) as bankidcnt FROM bank.Banks_token; 我得到以下结果: Row totalrow bankidcnt 1 9513 9903 我的问题是,

我在bigquery中发现了一个小故障/bug。 我们得到了一个基于银行统计数据的表格 starschema.net:clouddb:bank.Banks\u令牌

如果我运行以下查询:

SELECT count(*) as totalrow,
count(DISTINCT BankId ) as bankidcnt
FROM bank.Banks_token;
我得到以下结果:

Row totalrow    bankidcnt    
1   9513    9903    

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

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

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

请参见此处的完整文档:


2017年更新:


使用BigQuery时,standardSQL
COUNT(DISTINCT)
总是精确的。对于近似结果,请使用
APPROX\u COUNT\u DISTINCT()
。为什么会有人使用近似结果

我使用了EXACT\u COUNT\u DISTINCT()作为获取确切唯一计数的方法。它比COUNT更干净、更通用(不同的值,n>numRows)


在这里可以找到:

确切的\u COUNT\u DISTINCT()似乎只是遗留SQL()的一部分。也请看一下这篇文章底部史蒂夫·加内姆的笔记:?在standart中使用count与APPROX\u count\u DISTINCT时,成本仍然更高?或者功能被优化了