hll_merge()(聚合函数)
将组中的 HLL 结果合并为单个 HLL 值。
注意
无法合并使用不同准确度值创建的 hll 值。 有关详细信息,请参阅 hll()。
注意
此函数与 summarize 运算符结合使用。
有关详细信息,请参阅基础算法 (HyperLogLog ) 和估算准确度。
重要
hll()、hll_if() 和 hll_merge() 的结果可以进行存储,并在以后进行检索。 例如,你可能想要创建每日唯一用户摘要,然后就可以将其用于计算每周计数。 然而,这些结果的精确二进制表示形式可能会随时间而改变。 无法保证这些函数会为相同的输入生成相同的结果,因此不建议依赖它们。
语法
hll_merge
(
hll)
详细了解语法约定。
参数
客户 | 类型 | 必需 | 描述 |
---|---|---|---|
hll | string |
✔️ | 包含要合并的 HLL 值的列名称。 |
返回
此函数返回组中 hll 的合并 HLL 值。
提示
使用 dcount_hll 函数通过 hll() 和 hll_merge() 聚合函数来计算 dcount
。
示例
以下示例显示了合并为单个 HLL 值的组中 HLL 结果。
StormEvents
| summarize hllRes = hll(DamageProperty) by bin(StartTime,10m)
| summarize hllMerged = hll_merge(hllRes)
输出
结果仅显示了数组中的前 5 个结果。
hllMerged |
---|
[[1024,14],["-6903255281122589438","-7413697181929588220","-2396604341988936699","5824198135224880646","-6257421034880415225", ...],[]] |
估计准确度
此函数使用 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。
下图显示所有受支持的准确度设置的相对估计误差的概率分布函数,以百分比为单位: