

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# HLL\$1UNION 函数
<a name="HLL_UNION"></a>

HLL\$1UNION 函数将两个 HLL 草图组合成一个统一的草图。它使用 HyperLogLog (HLL) 算法将两幅草图合并为一张草图。查询可以使用生成的缓冲区将近似的唯一计数计算为该`hll_sketch_estimate`函数的长整数。

## 语法
<a name="HLL_UNION-syntax"></a>

```
HLL_UNION (( expr1, expr2 [, allowDifferentLgConfigK ] ))
```

## 参数
<a name="HLL_UNION-argument"></a>

 *expRN*   
一个包含由 HLL\$1SKETCH\$1AGG 生成的草图的`BINARY`表达式。

*allowDifferentLgConfigK*  
一个可选的布尔表达式，用于控制是否允许合并两个具有不同 LGConfigk 值的草图。默认值为 `false`。

## 返回类型
<a name="HLL_UNION-return-type"></a>

HLL\$1UNION 函数返回一个二进制缓冲区，其中包含组合输入表达式后计算出的 HyperLogLog 草图。当`allowDifferentLgConfigK`参数为时`true`，结果草图使用提供的两个`lgConfigK`值中较小的一个。

## 示例
<a name="HLL_UNION-examples"></a>

以下示例使用 HyperLogLog (HLL) 草图算法来估计数据集中两列`col1`和`col2`值的唯一计数。

 该`hll_sketch_agg(col1)`函数为`col1`列中的唯一值创建 HLL 草图。

该`hll_sketch_agg(col2)`函数为 col2 列中的唯一值创建 HLL 草图。

该`hll_union(...)`函数将步骤 1 和步骤 2 中创建的两个 HLL 草图组合成一个统一的 HLL 草图。

该`hll_sketch_estimate(...)`函数采用组合的 HLL 草图，并估计和的唯一值数量`col1`。`col2`

该`FROM VALUES`子句生成一个包含 5 行的测试数据集，其中`col1`包含值 1、1、2、2 和 3，`col2`包含值 4、4、5、5 和 6。

此查询的结果是两个`col1`和的估计唯一值计数`col2`，即 6。HLL 草图算法提供了一种有效的方法来估计唯一元素的数量，即使对于大型数据集也是如此，而无需存储完整的唯一值集。在此示例中，该`hll_union`函数用于组合来自两列的 HLL 草图，这样可以估计整个数据集的唯一计数，而不仅仅是单独估计每列的唯一计数。

```
SELECT hll_sketch_estimate(
  hll_union(
    hll_sketch_agg(col1),
    hll_sketch_agg(col2)))
  FROM VALUES
    (1, 4),
    (1, 4),
    (2, 5),
    (2, 5),
    (3, 6) AS tab(col1, col2);
  6
```

以下示例与上一个示例的区别在于，`hll_sketch_agg`函数调用中未指定精度参数（12 位）。在这种情况下，将使用 14 位的默认精度，与之前使用 12 位精度的示例相比，这可能为唯一计数提供更准确的估计值。

```
SELECT hll_sketch_estimate(
  hll_union(
    hll_sketch_agg(col1, 14),
    hll_sketch_agg(col2, 14)))
  FROM VALUES
    (1, 4),
    (1, 4),
    (2, 5),
    (2, 5),
    (3, 6) AS tab(col1, col2);
```