跳转到主要内容
Bitmap 可通过两种方式构造。第一种是使用带有 -State 的聚合函数 groupBitmap 进行构造,另一种是从 Array 对象构造 bitmap。

bitmapAnd

首次引入于:v20.1.0 计算两个 bitmap 的逻辑与 (AND) 。 语法
bitmapAnd(bitmap1, bitmap2)
参数 返回值 返回一个 bitmap,其中包含两个输入 bitmap 中都存在的位 AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
Response
┌─res─┐
│ [3] │
└─────┘

bitmapAndCardinality

引入于:v20.1.0 返回两个 bitmap 逻辑与 (AND) 结果的基数。 语法
bitmapAndCardinality(bitmap1, bitmap2)
参数 返回值 返回两个 bitmap 交集中置为 1 的位数。UInt64 示例 用法示例
Query
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
Response
┌─res─┐
│   1 │
└─────┘

bitmapAndnot

始于版本:v20.1.0 计算两个 bitmap 的集合差集 A AND-NOT B。 语法
bitmapAndnot(bitmap1, bitmap2)
参数 返回值 返回一个 bitmap,包含第一个 bitmap 中已置位但第二个 bitmap 中未置位的位 AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
Response
┌─res────┐
│ [1, 2] │
└────────┘

bitmapAndnotCardinality

引入版本:v20.1.0 返回两个 bitmap 进行 AND-NOT 运算后结果的基数。 语法
bitmapAndnotCardinality(bitmap1, bitmap2)
参数 返回值 返回 bitmap1 AND-NOT bitmap2 结果中置位的位数。UInt64 示例 使用示例
Query
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
Response
┌─res─┐
│   2 │
└─────┘

bitmapBuild

引入版本:v20.1.0 根据无符号整数数组构建 bitmap。它是函数 bitmapToArray 的逆操作。 语法
bitmapBuild(array)
参数 返回值 返回由给定数组构建的 bitmap AggregateFunction(groupBitmap, T) 示例 用法示例
Query
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
Response
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)        │
└─────┴──────────────────────────────────────────────┘

bitmapCardinality

引入版本:v20.1.0 返回 bitmap 中置为 1 的位数 (即基数) 。 语法
bitmapCardinality(bitmap)
参数 返回值 返回 bitmap 中被置为 1 的位数。UInt64 示例 使用示例
Query
SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res
Response
┌─res─┐
│   4 │
└─────┘

bitmapContains

引入版本:v20.1.0 检查 bitmap 是否包含指定元素。 语法
bitmapContains(bitmap, value)
参数 返回值 如果 bitmap 包含指定的值,则返回 1,否则返回 0UInt8 示例 使用示例
Query
SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res;
Response
┌─res─┐
│  1  │
└─────┘

bitmapHasAll

引入版本:v20.1.0 检查第一个 bitmap 是否包含第二个 bitmap 中所有置位的位。 语法
bitmapHasAll(bitmap1, bitmap2)
参数 返回值 如果第二个 bitmap 中的所有置位都存在于第一个 bitmap 中,则返回 1,否则返回 0UInt8 示例 用法示例
Query
SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res;
Response
┌─res─┐
│  1  │
└─────┘

bitmapHasAny

引入版本:v20.1.0 检查第一个 bitmap 是否包含第二个 bitmap 中任意置位。 语法
bitmapHasAny(bitmap1, bitmap2)
参数 返回值 如果第二个 bitmap 中的任意位出现在第一个 bitmap 中,则返回 1;否则返回 0UInt8 示例 使用示例
Query
SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res;
Response
┌─res─┐
│  1  │
└─────┘

bitmapMax

引入版本:v20.1.0 返回 bitmap 中被置位的最大位的位置;如果 bitmap 为空,则返回 0 语法
bitmapMax(bitmap)
参数 返回值 返回 bitmap 中被置位的最大位的位置;否则返回 0UInt64 示例 使用示例
Query
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;
Response
┌─res─┐
│   5 │
└─────┘

bitmapMin

引入版本:v20.1.0 返回 bitmap 中最小的已置位的位的位置。如果所有位都未置位,则返回 UINT32_MAX (如果 bitmap 包含超过 2^64 位,则返回 UINT64_MAX) 。 语法
bitmapMin(bitmap)
参数 返回值 返回 bitmap 中最小置位所在的位置,或 UINT32_MAX/UINT64_MAX UInt64 示例 使用示例
Query
SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res;
Response
┌─res─┐
│   2 │
└─────┘

bitmapOr

引入版本:v20.1.0 计算两个 bitmap 的逻辑或 (OR) 。 语法
bitmapOr(bitmap1, bitmap2)
参数 返回值 返回一个 bitmap,包含任一输入 bitmap 中置位的位。AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
Response
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘

bitmapOrCardinality

引入版本:v20.1.0 返回两个 bitmap 逻辑或 (OR) 结果的基数。 语法
bitmapOrCardinality(bitmap1, bitmap2)
参数 返回值 返回两个 bitmap 并集中的置位数。UInt64 示例 用法示例
Query
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
Response
┌─res─┐
│   5 │
└─────┘

bitmapSubsetInRange

引入版本:v20.1.0 返回 bitmap 的一个子集,仅包含指定范围 [start, end) 内被置位的位。使用从 1 开始的索引。 语法
bitmapSubsetInRange(bitmap, start, end)
参数 返回值 返回一个仅包含指定范围内置位的 bitmap AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res;
Response
┌─res───────┐
│ [2, 3, 4] │
└───────────┘

bitmapSubsetLimit

引入版本:v20.1.0 返回从位置 range_start 开始、最多包含 cardinality_limit 个置位的 bitmap 子集。使用从 1 开始的索引。 语法
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
参数 返回值 返回一个 bitmap,其中从 range_start 开始最多包含 cardinality_limit 个置位。AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res;
Response
┌─res────┐
│ [5, 3] │
└────────┘

bitmapToArray

自 v20.1.0 引入 将 bitmap 转换为无符号整数数组。它是函数 bitmapBuild 的逆操作。 语法
bitmapToArray(bitmap)
参数 返回值 返回 bitmap 中包含的无符号整数数组 Array(UInt*) 示例 使用示例
Query
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
Response
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘

bitmapTransform

引入版本:v20.1.0 通过将 from_array 中指定的位值替换为 to_array 中对应的位值,在 bitmap 中最多可修改 N 位。 语法
bitmapTransform(bitmap, from_array, to_array)
参数 返回值 返回一个其元素已根据给定映射进行转换的 bitmap AggregateFunction(groupBitmap, T) 示例 用法示例
Query
SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res;
Response
┌─res───────────────┐
│ [1, 3, 5, 20, 40] │
└───────────────────┘

bitmapXor

引入版本:v20.1.0 计算两个 bitmap 的对称差 (XOR) 。 语法
bitmapXor(bitmap1, bitmap2)
参数 返回值 返回一个 bitmap,包含存在于任一输入 bitmap 中但不同时存在于两者中的置位。AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
Response
┌─res──────────┐
│ [1, 2, 4, 5] │
└──────────────┘

bitmapXorCardinality

引入版本:v20.1.0 返回两个 bitmap 的 XOR (对称差) 的基数。 语法
bitmapXorCardinality(bitmap1, bitmap2)
参数 返回值 返回两个 bitmap 的对称差中置位数 UInt64 示例 使用示例
Query
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
Response
┌─res─┐
│   4 │
└─────┘

subBitmap

引入版本:v21.9.0 返回 bitmap 的一个子集,从位置 offset 开始。返回的 bitmap 的最大基数为 cardinality_limit 语法
subBitmap(bitmap, offset, cardinality_limit)
参数 返回值 返回一个 bitmap,按升序跳过 offset 个置位后开始,最多包含 limit 个置位。AggregateFunction(groupBitmap, T) 示例 使用示例
Query
SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res;
Response
┌─res────┐
│ [3, 4] │
└────────┘
最后修改于 2026年6月10日