BigQuery是否给出了聚合的确切值?

时间:2017-02-16 00:22:01

标签: hadoop google-bigquery

我已经读过,在执行大型聚合时,Apache Impala和PrestoDB都不能提供100%准确的结果(除非在查询中手动指定)。 BigQuery是否也会对大型聚合进行估算,或者数字是否准确?

如果它能够实现准确性,那么这是如何完成的(为什么Impala,Presto或ElasticSearch不会在其聚合上给出准确的值?)

我的意思是近似与完全相同:https://www.elastic.co/guide/en/elasticsearch/guide/current/_approximate_aggregations.html

2 个答案:

答案 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。在浮点上运行的函数(例如大多数统计函数)可能具有通常的浮点相关精度损失。