Pinot fasthll 和 distinctcounthll returns 不同的值

Pinot fasthll and distinctcounthll returns different values

我们正在使用 pinot hll,并被建议从 fasthll 切换到 distinctcounthll,但我们得到的计数非常不同,在相同条件下我们有 1000 倍的差异。 示例:

SELECT fasthll(my_hll), distinctcounthll(my_hll)
FROM counts_table WHERE timestamp >= 1500768000

我得到结果:

"aggregationResults": [
    {
        "function": "fastHLL_my_hll",
        "value": "68685244"
    }, {
        "function": "distinctCountHLL_my_hll",
        "value": "50535"
    }]

谁能说说它们之间的最大区别是什么?

请参考pinot-issue-5153

FastHll 会将一个字符串转换为一个hyperloglog 对象,它可以表示数千个唯一值。 DistinctCountHLL 将字符串视为一个值,而不是 hyperloglog 对象,因此它将 return 近似计算唯一的 hyperloglog 序列化字符串的数量,该值应该接近您扫描的总数。

由于反序列化性能低下,fasthll 已被弃用。您可以使用 org.apache.pinot.core.common.ObjectSerDeUtils.HYPER_LOG_LOG_SER_DE.serialize(hyperLogLog) 为序列化的 HyperLogLog 生成 BYTES 类型,并使用 distinctcounthll

查询它