在 BigQuery 中使用 HyperLogLog 函数是否可以从对相同数据的相同查询中得到不同的结果?
Using HyperLogLog functions in BigQuery can you get different results from the same query on the same data?
我的查询如下:
SELECT
HLL_COUNT.MERGE((SELECT HLL_COUNT.INIT(key.item) FROM UNNEST(data.list) key)),
FROM dataset
假设我 运行 这个查询 10000 次(在同一组数据上),我会得到 10000 个相同的结果还是一小部分时间我可能会得到略有不同的输出?
在 documentation 中,我没有找到关于这个主题的解释,我想理解这一点,而不必 运行 千次我的查询 ;)
我会说你很有可能得到相同的结果。但是,在不了解详细实现的情况下,您不能 100% 肯定地说。 BigQuery 正在使用论文 HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm 中描述的 HLL++ 算法。在那里,稀疏表示用于小基数。问题是稀疏表示的维护以及何时切换到密集表示的标准没有明确定义。可能,实现显示了对数据处理顺序的依赖。因此,如果处理和合并顺序没有明确定义,则可能会出现稀疏表示或密集表示的情况,这会导致估算值略有不同。
我的查询如下:
SELECT
HLL_COUNT.MERGE((SELECT HLL_COUNT.INIT(key.item) FROM UNNEST(data.list) key)),
FROM dataset
假设我 运行 这个查询 10000 次(在同一组数据上),我会得到 10000 个相同的结果还是一小部分时间我可能会得到略有不同的输出?
在 documentation 中,我没有找到关于这个主题的解释,我想理解这一点,而不必 运行 千次我的查询 ;)
我会说你很有可能得到相同的结果。但是,在不了解详细实现的情况下,您不能 100% 肯定地说。 BigQuery 正在使用论文 HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm 中描述的 HLL++ 算法。在那里,稀疏表示用于小基数。问题是稀疏表示的维护以及何时切换到密集表示的标准没有明确定义。可能,实现显示了对数据处理顺序的依赖。因此,如果处理和合并顺序没有明确定义,则可能会出现稀疏表示或密集表示的情况,这会导致估算值略有不同。