

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# HyperLogLog 草图
<a name="hyperloglog-overview"></a>

本主题介绍如何在 Amazon Redshift 中使用 HyperLogLog 草图。HyperLogLog 是一种解决 count-distinct 问题的算法，用于近似计算数据集中不同元素的数量。HyperLogLog 草图是有关数据集唯一性数据的数组。

*HyperLogLog* 是一种用于估计多集基数的算法。*基数*指的是多集中的不同值的数量。例如，在集合 \$14,3,6,2,2,6,4,3,6,2,2,3\$1 中，基数为 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 数据类型](r_UNLOAD.md#unload-usage-hll)。要导入文本或逗号分隔值 (CSV) 数据到 Amazon Redshift，请使用 COPY 命令。有关更多信息，请参阅 [加载 HLLSKETCH 数据类型](copy-usage_notes-hll.md)。

有关与 HyperLogLog 一起使用的函数的信息，请参阅[HyperLogLog 函数](hyperloglog-functions.md)。

**Topics**
+ [注意事项](hyperloglog-functions-usage-notes.md)
+ [限制](hyperloglog-functions-limitations.md)
+ [示例](r_HLL-examples.md)