> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Bitmap 函数文档

# Bitmap Functions

Bitmap 可通过两种方式构造。第一种是使用带有 `-State` 的聚合函数 groupBitmap 进行构造，另一种是从 Array 对象构造 bitmap。

{/*AUTOGENERATED_START*/}

<div id="bitmapAnd">
  ## bitmapAnd
</div>

首次引入于：v20.1.0

计算两个 bitmap 的逻辑与 (AND) 。

**语法**

```sql theme={null}
bitmapAnd(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回一个 bitmap，其中包含两个输入 bitmap 中都存在的位 [`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res─┐
│ [3] │
└─────┘
```

<div id="bitmapAndCardinality">
  ## bitmapAndCardinality
</div>

引入于：v20.1.0

返回两个 bitmap 逻辑与 (AND) 结果的基数。

**语法**

```sql theme={null}
bitmapAndCardinality(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回两个 bitmap 交集中置为 1 的位数。[`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**用法示例**

```sql title=Query theme={null}
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   1 │
└─────┘
```

<div id="bitmapAndnot">
  ## bitmapAndnot
</div>

始于版本：v20.1.0

计算两个 bitmap 的集合差集 A AND-NOT B。

**语法**

```sql theme={null}
bitmapAndnot(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回一个 bitmap，包含第一个 bitmap 中已置位但第二个 bitmap 中未置位的位 [`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [1, 2] │
└────────┘
```

<div id="bitmapAndnotCardinality">
  ## bitmapAndnotCardinality
</div>

引入版本：v20.1.0

返回两个 bitmap 进行 AND-NOT 运算后结果的基数。

**语法**

```sql theme={null}
bitmapAndnotCardinality(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回 `bitmap1 AND-NOT bitmap2` 结果中置位的位数。[`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   2 │
└─────┘
```

<div id="bitmapBuild">
  ## bitmapBuild
</div>

引入版本：v20.1.0

根据无符号整数数组构建 bitmap。它是函数 [`bitmapToArray`](/zh/reference/functions/regular-functions/bitmap-functions#bitmapToArray) 的逆操作。

**语法**

```sql theme={null}
bitmapBuild(array)
```

**参数**

* `array` — 无符号整数数组。[`Array(UInt*)`](/zh/reference/data-types/array)

**返回值**

返回由给定数组构建的 bitmap [`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**用法示例**

```sql title=Query theme={null}
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
```

```response title=Response theme={null}
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)        │
└─────┴──────────────────────────────────────────────┘
```

<div id="bitmapCardinality">
  ## bitmapCardinality
</div>

引入版本：v20.1.0

返回 bitmap 中置为 1 的位数 (即基数) 。

**语法**

```sql theme={null}
bitmapCardinality(bitmap)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回 bitmap 中被置为 1 的位数。[`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res
```

```response title=Response theme={null}
┌─res─┐
│   4 │
└─────┘
```

<div id="bitmapContains">
  ## bitmapContains
</div>

引入版本：v20.1.0

检查 bitmap 是否包含指定元素。

**语法**

```sql theme={null}
bitmapContains(bitmap, value)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `value` — 待检查的元素。[(U)Int8/16/32/64](/zh/reference/data-types/int-uint)

**返回值**

如果 bitmap 包含指定的值，则返回 `1`，否则返回 `0`。[`UInt8`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapHasAll">
  ## bitmapHasAll
</div>

引入版本：v20.1.0

检查第一个 bitmap 是否包含第二个 bitmap 中所有置位的位。

**语法**

```sql theme={null}
bitmapHasAll(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

如果第二个 bitmap 中的所有置位都存在于第一个 bitmap 中，则返回 `1`，否则返回 `0`。[`UInt8`](/zh/reference/data-types/int-uint)

**示例**

**用法示例**

```sql title=Query theme={null}
SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapHasAny">
  ## bitmapHasAny
</div>

引入版本：v20.1.0

检查第一个 bitmap 是否包含第二个 bitmap 中任意置位。

**语法**

```sql theme={null}
bitmapHasAny(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

如果第二个 bitmap 中的任意位出现在第一个 bitmap 中，则返回 `1`；否则返回 `0`。[`UInt8`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapMax">
  ## bitmapMax
</div>

引入版本：v20.1.0

返回 bitmap 中被置位的最大位的位置；如果 bitmap 为空，则返回 `0`。

**语法**

```sql theme={null}
bitmapMax(bitmap)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回 bitmap 中被置位的最大位的位置；否则返回 `0`。[`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   5 │
└─────┘
```

<div id="bitmapMin">
  ## bitmapMin
</div>

引入版本：v20.1.0

返回 bitmap 中最小的已置位的位的位置。如果所有位都未置位，则返回 `UINT32_MAX` (如果 bitmap 包含超过 `2^64` 位，则返回 `UINT64_MAX`) 。

**语法**

```sql theme={null}
bitmapMin(bitmap)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回 bitmap 中最小置位所在的位置，或 `UINT32_MAX`/`UINT64_MAX` [`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   2 │
└─────┘
```

<div id="bitmapOr">
  ## bitmapOr
</div>

引入版本：v20.1.0

计算两个 bitmap 的逻辑或 (OR) 。

**语法**

```sql theme={null}
bitmapOr(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回一个 bitmap，包含任一输入 bitmap 中置位的位。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘
```

<div id="bitmapOrCardinality">
  ## bitmapOrCardinality
</div>

引入版本：v20.1.0

返回两个 bitmap 逻辑或 (OR) 结果的基数。

**语法**

```sql theme={null}
bitmapOrCardinality(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回两个 bitmap 并集中的置位数。[`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**用法示例**

```sql title=Query theme={null}
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   5 │
└─────┘
```

<div id="bitmapSubsetInRange">
  ## bitmapSubsetInRange
</div>

引入版本：v20.1.0

返回 bitmap 的一个子集，仅包含指定范围 \[start, end) 内被置位的位。使用从 1 开始的索引。

**语法**

```sql theme={null}
bitmapSubsetInRange(bitmap, start, end)
```

**参数**

* `bitmap` — 要从中提取 子集 的 bitmap。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `start` — 范围起始位置 (含) 。[`UInt*`](/zh/reference/data-types/int-uint) - `end` — 范围结束位置 (不含) 。[`UInt*`](/zh/reference/data-types/int-uint)

**返回值**

返回一个仅包含指定范围内置位的 bitmap [`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res;
```

```response title=Response theme={null}
┌─res───────┐
│ [2, 3, 4] │
└───────────┘
```

<div id="bitmapSubsetLimit">
  ## bitmapSubsetLimit
</div>

引入版本：v20.1.0

返回从位置 `range_start` 开始、最多包含 `cardinality_limit` 个置位的 bitmap 子集。使用从 1 开始的索引。

**语法**

```sql theme={null}
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `range_start` — 范围的起始位置 (包含) 。[`UInt32`](/zh/reference/data-types/int-uint) - `cardinality_limit` — 子集的最大基数。[`UInt32`](/zh/reference/data-types/int-uint)

**返回值**

返回一个 bitmap，其中从 `range_start` 开始最多包含 `cardinality_limit` 个置位。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [5, 3] │
└────────┘
```

<div id="bitmapToArray">
  ## bitmapToArray
</div>

自 v20.1.0 引入

将 bitmap 转换为无符号整数数组。它是函数 [`bitmapBuild`](/zh/reference/functions/regular-functions/bitmap-functions#bitmapBuild) 的逆操作。

**语法**

```sql theme={null}
bitmapToArray(bitmap)
```

**参数**

* `bitmap` — 要转换的 bitmap。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回 bitmap 中包含的无符号整数数组 [`Array(UInt*)`](/zh/reference/data-types/array)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘
```

<div id="bitmapTransform">
  ## bitmapTransform
</div>

引入版本：v20.1.0

通过将 `from_array` 中指定的位值替换为 `to_array` 中对应的位值，在 bitmap 中最多可修改 N 位。

**语法**

```sql theme={null}
bitmapTransform(bitmap, from_array, to_array)
```

**参数**

* `bitmap` — bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `from_array` — 需要替换的原始置位组成的 Array。[`Array(T)`](/zh/reference/data-types/array)。- `to_array` — 用于替换的新置位组成的 Array。[`Array(T)`](/zh/reference/data-types/array)。

**返回值**

返回一个其元素已根据给定映射进行转换的 bitmap [`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**用法示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res;
```

```response title=Response theme={null}
┌─res───────────────┐
│ [1, 3, 5, 20, 40] │
└───────────────────┘
```

<div id="bitmapXor">
  ## bitmapXor
</div>

引入版本：v20.1.0

计算两个 bitmap 的对称差 (XOR) 。

**语法**

```sql theme={null}
bitmapXor(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。 - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回一个 bitmap，包含存在于任一输入 bitmap 中但不同时存在于两者中的置位。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res──────────┐
│ [1, 2, 4, 5] │
└──────────────┘
```

<div id="bitmapXorCardinality">
  ## bitmapXorCardinality
</div>

引入版本：v20.1.0

返回两个 bitmap 的 XOR (对称差) 的基数。

**语法**

```sql theme={null}
bitmapXorCardinality(bitmap1, bitmap2)
```

**参数**

* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。- `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)。

**返回值**

返回两个 bitmap 的对称差中置位数 [`UInt64`](/zh/reference/data-types/int-uint)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   4 │
└─────┘
```

<div id="subBitmap">
  ## subBitmap
</div>

引入版本：v21.9.0

返回 bitmap 的一个子集，从位置 `offset` 开始。返回的 bitmap 的最大基数为 `cardinality_limit`。

**语法**

```sql theme={null}
subBitmap(bitmap, offset, cardinality_limit)
```

**参数**

* `bitmap` — Bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction). - `offset` — 从开头起要跳过的置位数量 (从零开始计数) 。[`UInt32`](/zh/reference/data-types/int-uint) - `cardinality_limit` — 子集中最多包含的置位数量。[`UInt32`](/zh/reference/data-types/int-uint)

**返回值**

返回一个 bitmap，按升序跳过 `offset` 个置位后开始，最多包含 `limit` 个置位。[`AggregateFunction(groupBitmap, T)`](/zh/reference/data-types/aggregatefunction)

**示例**

**使用示例**

```sql title=Query theme={null}
SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [3, 4] │
└────────┘
```
