我的印象是,如果您要在某个列上执行COUNT(DISTINCT xyz)
,那么它将等于该列GROUP BY
的常规计数。
但是,当我在BigQuery中的一个非常大的数据集上执行此操作时,条件完全相同,结果显示差异很大:
Query Type Count
----------------------------------
- count(distinct ColX) > 7 million
- count(ColX)
... GROUP BY ColX ~ 6.5 million
这是为什么?我认为这两个不同版本的计数列中的唯一值应该返回相同的计数结果是错误的吗?
答案 0 :(得分:6)
On Legacy SQL。
如果使用DISTINCT关键字,则该函数返回指定字段的不同值的数量。 请注意,DISTINCT的返回值是统计近似值,并不保证是准确的 - 文档也清楚这一点。
如果您需要COUNT(DISTINCT)的更高精度,则可以指定第二个参数n,该参数提供低于该阈值的保证精确结果的阈值。默认情况下,n为1000,但如果给出更大的n,则会得到COUNT(DISTINCT)的精确结果,直到n的值。但是,给出较大的n值会降低此运算符的可伸缩性,并可能大大增加查询执行时间或导致查询失败。
要计算不同值的确切数量,请使用EXACT_COUNT_DISTINCT
。或者,对于更具伸缩性的方法,请考虑在相关字段上使用GROUP BY,然后应用COUNT(*)。 GROUP BY方法更具可扩展性,但可能会产生轻微的前期性能损失。
https://cloud.google.com/bigquery/query-reference#aggfunctions