我已经读到apacheimpala和prestodb在进行大型聚合时都不能给出100%的准确结果(除非在查询中手动指定)。bigquery是否也对大型聚合进行估计,或者这些数字是否精确?
如果它能够实现精确性,那么这是如何做到的(为什么impala、presto或elasticsearch不能给出它们的聚合的精确值?)
以下是我所说的近似与精确的意思:https://www.elastic.co/guide/en/elasticsearch/guide/current/_approximate_aggregations.html.
2条答案
按热度按时间szqfcxe21#
在bigquery的标准sql方言中,所有近似聚合函数都有适当的名称,每个函数都以
APPROX_
前缀(参见https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#approximate-聚合函数)。聚合函数没有APPROX_
标准sql中的前缀都是精确的。p、 在浮点上操作的函数,如大多数统计函数,通常可能会有与浮点相关的精度损失。
i1icjdpr2#
在大多数情况下,是的,结果是准确的。如果您想了解更多有关要使用的聚合函数的信息,可以参考bq文档来确认函数的行为。
作为统计近似函数的一个例子,我们有
count(distinct field)
. 如果你想知道确切的数字,那么你应该使用exact_count_distinct(field)
(这在文件中也有解释)。这是通过牺牲性能来实现的。如果你有一些大的数据集,你可以运行两者
count(distinct)
以及exact_count_distinct
作为一个例子,您将看到响应时间之间的巨大差异。大多数情况下,尽管bigquery非常快,所以根据数据的大小,您可以使用精确的操作,并且响应仍在秒范围内。