

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

# HLL\_UNION\_AGG 函数
<a name="HLL_UNION_AGG"></a>

HLL\_UNION\_AGG 函数将多个 HLL 草图组合成一个统一的草图。它使用 HyperLogLog （HLL）算法将一组草图组合成一个草图。查询可以使用生成的缓冲区通过该`hll_sketch_estimate`函数计算近似的唯一计数。

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

```
HLL_UNION_AGG ( expr [, allowDifferentLgConfigK ] )
```

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

 *expr*   
一个包含由 HLL\_SKETCH\_AGG 生成的草图的`BINARY`表达式。

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

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

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

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

以下示例使用 HyperLogLog (HLL) 草图绘制算法来估计多个 HLL 草图的唯一值数量。

第一个示例估计数据集中值的唯一数量。

```
SELECT hll_sketch_estimate(hll_union_agg(sketch, true))
    FROM (SELECT hll_sketch_agg(col) as sketch
            FROM VALUES (1) AS tab(col)
          UNION ALL
          SELECT hll_sketch_agg(col, 20) as sketch
            FROM VALUES (1) AS tab(col));
  1
```

内部查询创建了两个 HLL 草图：
+ 第一个 SELECT 语句使用单个值 1 创建草图。
+ 第二个 SELECT 语句根据另一个单一值 1 创建草图，但精度为 20。

外部查询使用 HLL\_UNION\_AGG 函数将两个草图组合成一个草图。然后，它将 HLL\_SKETCH\_ESTIMATE 函数应用于此组合草图，以估计唯一的值数。

此查询的结果是该`col`列中值的估计唯一计数，即`1`。这意味着两个输入值 1 被认为是唯一的，即使它们具有相同的值。

第二个示例包含 HLL\_UNION\_AGG 函数的不同精度参数。在这种情况下，两个 HLL 草图都是以 14 位的精度创建的，这使得它们可以`hll_union_agg`与参数一起成功组合。`true`

```
SELECT hll_sketch_estimate(hll_union_agg(sketch, true))
    FROM (SELECT hll_sketch_agg(col, 14) as sketch
            FROM VALUES (1) AS tab(col)
          UNION ALL
          SELECT hll_sketch_agg(col, 14) as sketch
            FROM VALUES (1) AS tab(col));
  1
```

查询的最终结果是估计的唯一计数，在本例中也是如此`1`。这意味着两个输入值 1 被认为是唯一的，即使它们具有相同的值。