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
查询它
我们正在使用 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
查询它