我已经读过,在执行大型聚合时,Apache Impala和PrestoDB都不能提供100%准确的结果(除非在查询中手动指定)。 BigQuery是否也会对大型聚合进行估算,或者数字是否准确?
如果它能够实现准确性,那么这是如何完成的(为什么Impala,Presto或ElasticSearch不会在其聚合上给出准确的值?)
我的意思是近似与完全相同:https://www.elastic.co/guide/en/elasticsearch/guide/current/_approximate_aggregations.html。
答案 0 :(得分:2)
在大多数情况下,是的,结果是准确的。如果您想了解有关要使用的某些聚合函数的更多信息,可以参考BQ docs确认函数的行为方式。
作为统计逼近函数的一个例子,我们有count(distinct field)
。如果您想拥有确切的数字,那么您应该使用exact_count_distinct(field)
(这也在文档中有解释)。
这是通过简单地牺牲性能来完成的。如果您要使用一些大型数据集,则可以同时运行count(distinct)
和exact_count_distinct
,您会看到响应时间之间存在相当大的差异。
在大多数情况下,BigQuery非常快,因此根据您的数据大小,您可以使用精确的操作,但仍然可以在秒范围内获得响应。
答案 1 :(得分:2)
在BigQuery的标准SQL方言中,所有近似聚合函数都被恰当地命名,每个函数都以APPROX_
前缀开头(参见https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#approximate-aggregate-functions)。
标准SQL中没有APPROX_
前缀的聚合函数都是精确的。
P.S。在浮点上运行的函数(例如大多数统计函数)可能具有通常的浮点相关精度损失。