【问题标题】:HLL+ Precision for Google BigQueryGoogle BigQuery 的 HLL+ 精度
【发布时间】:2019-05-24 18:07:01
【问题描述】:

这里描述了使用HLL.INIT(...)HLL.MERGE(...)的精度:

https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions

但是,我想知道是否存在基数大小,在该基数大小下,HLL 可以保证是准确的。例如,如果我有 10 个不同的值,并且我在各个区域将它们“合并”在一起,那么每次都会 100% 准确,还是会受到 HLL 错误范围的影响?换句话说,HLLPrecision 的每个级别是否有保证的上限,在该上限下可以保证 100% 的准确度?如果是这样,如何确定每个精度级别?

【问题讨论】:

  • @MikhailBerlyant 是的,我开始阅读它,但我仍然不确定“它的确切位置”,如果有的话
  • 我不敢推测-但我们开始了-我怀疑您的问题是否有肯定的答案。我提供了该文档的链接,以防您想阅读更多内容并对 Google 的 HLL+ 有更多的了解。显然是个好问题(+1)!希望 Google 团队的人能阐明这一点
  • 我想知道为什么了解这种情况的确切行为很重要。
  • @FelipeHoffa 好吧,如果它从未真正正确,我不会使用它(除非其他地方存在我无法解决的内存限制)

标签: google-cloud-platform google-bigquery hyperloglog


【解决方案1】:

如果我有 10 个不同的值,并且我在各个区域将它们“合并”在一起,这是否每次都是 100% 准确,还是会受到 HLL 错误范围的影响?

对于相同的输入,输出应该相同。实际上,对于相同的输入,BigQuery 可以使用缓存结果,因此,如果一次 100% 准确,那么每次都是。

HLL Precision 的每个级别是否有保证的上限,在该上限下可以保证 100% 的准确度?如果是这样,如何确定每个精度级别?

不,HLL++ 提供估算值。对于任何基数大小和/或精度级别,都不能保证 100% 的准确度。如果您正在寻找 100% 的准确率,请使用 COUNT(DISTINCT ...)

【讨论】:

  • 只有一种情况下 HLL++ 是准确的:它可以准确地说有 no 个条目(结果为零)。任何其他值(1 或更高)都是估计值。例如,如果它报告一个,实际上它可能不止一个。 (实际上在如此低的基数下使用线性计数,但这只是一个实现细节。)
猜你喜欢
  • 2017-11-14
  • 2019-05-08
  • 2021-10-20
  • 2019-04-07
  • 2023-03-13
  • 2022-01-13
  • 1970-01-01
  • 2019-04-09
  • 2021-06-05
相关资源
最近更新 更多