你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
hll()(聚合函数)
hll()
函数是用于估计一组值中的唯一值的一种方法。 为此,它通过使用 dcount
函数计算 汇总 运算符中聚合的中间结果。
阅读基础算法 (HyperLogLog ) 和估算准确度。
备注
此函数与 summarize 运算符结合使用。
hll
(
expr [,
准确度])
详细了解语法约定。
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
expr | string |
✔️ | 用于聚合计算的表达式。 |
accuracy | int |
该值用于控制速度与准确度之间的平衡。 如果未指定,则默认值为 1 。 有关受支持的值,请参阅估计准确度。 |
返回在整个组中对 expr 进行非重复计数的中间结果。
备注
- hll()、hll_if() 和 hll_merge() 的结果可以进行存储,并在以后进行检索。 例如,你可能想要创建每日唯一用户摘要,然后可用于计算每周计数。 但是,这些结果的精确二进制表示形式可能会随时间而变化。 不能保证这些函数为相同的输入生成相同的结果,因此我们不建议依赖它们。
- 请使用 hll_merge 函数合并多个
hll()
函数的结果。 - 请使用 dcount_hll 函数计算
hll()
或hll_merge
函数的输出中的非重复值数目。
在下面的示例中,hll()
函数用来估计 DamageProperty
列的每个 10 分钟时间箱内 StartTime
列的唯一值的数目。
StormEvents
| summarize hll(DamageProperty) by bin(StartTime,10m)
输出
显示的结果表仅包括前 10 行。
StartTime | hll_DamageProperty |
---|---|
2007-01-01T00:20:00Z | [[1024,14],["3803688792395291579"],[]] |
2007-01-01T01:00:00Z | [[1024,14],["7755241107725382121","-5665157283053373866","3803688792395291579","-1003235211361077779"],[]] |
2007-01-01T02:00:00Z | [[1024,14],["-1003235211361077779","-5665157283053373866","7755241107725382121"],[]] |
2007-01-01T02:20:00Z | [[1024,14],["7755241107725382121"],[]] |
2007-01-01T03:30:00Z | [[1024,14],["3803688792395291579"],[]] |
2007-01-01T03:40:00Z | [[1024,14],["-5665157283053373866"],[]] |
2007-01-01T04:30:00Z | [[1024,14],["3803688792395291579"],[]] |
2007-01-01T05:30:00Z | [[1024,14],["3803688792395291579"],[]] |
2007-01-01T06:30:00Z | [[1024,14],["1589522558235929902"],[]] |
此函数使用 HyperLogLog (HLL) 算法的变体,该算法对集基数进行随机估算。 该算法提供一个“旋钮”,可用于平衡每个内存大小的准确度和执行时间:
精确度 | 错误 (%) | 条目数 |
---|---|---|
0 | 1.6 | 212 |
1 | 0.8 | 214 |
2 | 0.4 | 216 |
3 | 0.28 | 217 |
4 | 0.2 | 218 |
备注
“条目数”列是 HLL 实现中 1 字节计数器的数目。
如果集基数足够小,则该算法包括以下有关执行理想计数(零错误)的规定:
- 当准确度等级为
1
时,将返回 1000 个值 - 当准确度等级为
2
时,将返回 8000 个值
错误边界基于概率,而不是基于理论界限。 值是错误分布的标准偏差 (sigma),99.7% 的估计值的相对误差小于 3 x sigma。
下图显示所有受支持的准确度设置的相对估计误差的概率分布函数,以百分比为单位: