HyperLogLog 草图
本主题介绍如何在 Amazon Redshift 中使用 HyperLogLog 草图。HyperLogLog 是一种解决 count-distinct 问题的算法,用于近似计算数据集中不同元素的数量。HyperLogLog 草图是有关数据集唯一性数据的数组。
HyperLogLog 是一种用于估计多集基数的算法。基数指的是多集中的不同值的数量。例如,在集合 {4,3,6,2,2,6,4,3,6,2,2,3} 中,基数为 4,不同值为 4、3、6 和 2。
HyperLogLog 算法的精度(也称为 m 值)可能会影响估计基数的精度。在基数估计期间,Amazon Redshift 使用默认精度值 15。对于较小的数据集,此值最多可为 26。因此,平均相对误差范围介于 0.01—0.6% 之间。
在计算多集的基数时,HyperLogLog 算法会生成一个称为 HLL 草图的构造。HLL 草图对有关多集中不同值的信息进行封装。Amazon Redshift 数据类型 HLLSKETCH 表示此类草图值。此数据类型可用于在 Amazon Redshift 表中存储草图。此外,Amazon Redshift 还支持可以作为聚合函数和标量函数应用于 HLLSKETCH 值的运算。您可以使用这些函数来提取 HLLSKETCH 的基数并组合多个 HLLSKETCH 值。
当从大型数据集中提取基数时,HLLSKETCH 数据类型可提供显著的查询性能优势。您可以使用 HLLSKETCH 值预聚合这些数据集并将它们存储在表中。Amazon Redshift 可以直接从存储的 HLLSKETCH 值中提取基数,而无需访问基础数据集。
处理 HLL 草图时,Amazon Redshift 会执行优化,以最大限度地减少草图占用的内存空间,并最大限度地提高提取基数的精度。Amazon Redshift 对 HLL 草图使用两种表示法:稀疏和密集。HLLSKETCH 以稀疏格式开始。当插入新值时,它的大小会增加。当其大小达到密集表示的大小后,Amazon Redshift 会自动将草图从稀疏转换为密集。
当草图采用稀疏格式时,Amazon Redshift 会以 JSON 格式导入、导出和打印 HLLSKETCH。当草图采用密集格式时,Amazon Redshift 会以 Base64 字符串格式导入、导出和打印 HLLSKETCH。有关 UNLOAD 的更多信息,请参阅卸载 HLLSKETCH 数据类型。要导入文本或逗号分隔值 (CSV) 数据到 Amazon Redshift,请使用 COPY 命令。有关更多信息,请参阅 加载 HLLSKETCH 数据类型。
有关与 HyperLogLog 一起使用的函数的信息,请参阅HyperLogLog 函数。