位图函数
位图可以通过两种方式构造。第一种方式是使用带有 -State 的聚合函数 groupBitmap 来构造,另一种方式是从 Array 对象构造位图。
bitmapAnd
引入版本:v20.1
计算两个位图的逻辑与(AND)。
语法
参数
bitmap1— 第一个 bitmap 对象。AggregateFunction(groupBitmap, T)bitmap2— 第二个 bitmap 对象。AggregateFunction(groupBitmap, T)
返回值
返回一个 bitmap,其中包含在两个输入 bitmap 中都存在的位。AggregateFunction(groupBitmap, T)
示例
用法示例
bitmapAndCardinality
自 v20.1 引入
返回两个位图进行逻辑与(AND)运算结果的基数。
语法
参数
bitmap1— 第一个 bitmap 对象。AggregateFunction(groupBitmap, T)。-bitmap2— 第二个 bitmap 对象。AggregateFunction(groupBitmap, T)。
返回值
返回两个 bitmap 交集中被置位的位数。UInt64
示例
使用示例
bitmapAndnot
引入于:v20.1
计算两个位图的集合差 A AND-NOT B。
语法
参数
bitmap1— 第一个位图对象。AggregateFunction(groupBitmap, T). -bitmap2— 第二个位图对象。AggregateFunction(groupBitmap, T).
返回值
返回一个位图对象,其中包含在第一个位图中出现但在第二个位图中不存在的已设置位。AggregateFunction(groupBitmap, T)
示例
使用示例
bitmapAndnotCardinality
引入版本:v20.1
返回对两个 bitmap 执行 AND-NOT 运算结果的基数。
语法
参数
bitmap1— 第一个 bitmap 对象,类型为AggregateFunction(groupBitmap, T). -bitmap2— 第二个 bitmap 对象,类型为AggregateFunction(groupBitmap, T).
返回值
返回表达式 bitmap1 AND-NOT bitmap2 结果中已设置位(为 1 的位)的数量,类型为 UInt64
示例
使用示例
bitmapBuild
自 v20.1 引入
根据无符号整数数组构建位图。它与函数 bitmapToArray 的作用相反。
语法
参数
array— 无符号整数数组。Array(UInt*)
返回值
从提供的数组生成并返回一个位图。AggregateFunction(groupBitmap, T)
示例
使用示例
bitmapCardinality
自 v20.1 起引入
返回位图中已设置位的数量(基数)。
语法
参数
bitmap— Bitmap 对象。AggregateFunction(groupBitmap, T)。
返回值
返回 bitmap 中已置位的位数,类型为 UInt64。
示例
使用示例
bitmapContains
自 v20.1 版本引入
检查位图中是否包含特定元素。
语法
参数
bitmap— 位图对象。AggregateFunction(groupBitmap, T)。-value— 待检查的元素。(U)Int8/16/32/64
返回值
如果位图包含指定的值,则返回 1,否则返回 0,返回类型为 UInt8
示例
使用示例
bitmapHasAll
自 v20.1 起引入
检查第一个位图是否包含第二个位图中所有已设置的位。
语法
参数
bitmap1— 第一个位图对象。AggregateFunction(groupBitmap, T)。-bitmap2— 第二个位图对象。AggregateFunction(groupBitmap, T)。
返回值
如果第二个位图中所有已设置的位都存在于第一个位图中,则返回 1,否则返回 0,返回类型为 UInt8
示例
使用示例
bitmapHasAny
引入版本:v20.1
检查第一个 bitmap 是否包含第二个 bitmap 中设置的任意一位。
语法
参数
bitmap1— 第一个位图对象。AggregateFunction(groupBitmap, T)-bitmap2— 第二个位图对象。AggregateFunction(groupBitmap, T).
返回值
如果第二个位图中的任意位在第一个位图中存在,则返回 1,否则返回 0 UInt8
示例
用法示例
bitmapMax
引入版本:v20.1
返回位图中被置位的最高位的位置,如果位图为空则返回 0。
语法
参数
bitmap— 位图对象。AggregateFunction(groupBitmap, T)。
返回值
返回位图中最高被置位的位的位置,否则返回 0,类型为 UInt64
示例
用法示例
bitmapMin
引入于:v20.1
返回位图中第一个被设置为 1 的位的位置。如果所有位都未设置,则返回 UINT32_MAX(如果位图包含超过 2^64 位,则返回 UINT64_MAX)。
语法
参数
bitmap— Bitmap 对象。AggregateFunction(groupBitmap, T)。
返回值
返回 bitmap 中被置位的最小位的位置,如果不存在则返回 UINT32_MAX/UINT64_MAX UInt64。
示例
使用示例
bitmapOr
引入版本:v20.1
计算两个 bitmap 的逻辑或(OR)。
语法
参数
bitmap1— 第一个 bitmap 对象。AggregateFunction(groupBitmap, T). -bitmap2— 第二个 bitmap 对象。AggregateFunction(groupBitmap, T).
返回值
返回一个 bitmap,其中包含在任一输入 bitmap 中被置位的比特。AggregateFunction(groupBitmap, T)
示例
使用示例
bitmapOrCardinality
自 v20.1 引入
返回两个位图进行逻辑或(OR)运算后的基数。
语法
参数
bitmap1— 第一个位图对象。AggregateFunction(groupBitmap, T). -bitmap2— 第二个位图对象。AggregateFunction(groupBitmap, T).
返回值
返回两个位图并集中的已置位位数,类型为 UInt64
示例
用法示例
bitmapSubsetInRange
自 v20.1 起引入
返回位图在指定范围 [start, end) 内的一个子集,仅包含该范围内已置位的比特。索引从 1 开始计数。
语法
参数
bitmap— 要从中提取子集的位图。AggregateFunction(groupBitmap, T)。 -start— 范围起始位置(包含)。UInt*-end— 范围结束位置(不包含)。UInt*
返回值
返回一个仅包含指定范围内已设置位的位图。AggregateFunction(groupBitmap, T)
示例
用法示例
bitmapSubsetLimit
自 v20.1 引入
返回位图中从位置 range_start 开始的一个子集,其中最多包含 cardinality_limit 个已置位的位。索引从 1 开始计数。
语法
参数
bitmap— Bitmap 对象。AggregateFunction(groupBitmap, T)range_start— 范围起始值(含)。UInt32cardinality_limit— 子集的最大基数。UInt32
返回值
返回一个 bitmap,其中从 range_start 开始,至多包含 cardinality_limit 个已设置的位。AggregateFunction(groupBitmap, T)
示例
使用示例
bitmapToArray
自 v20.1 起引入
将 bitmap 转换为无符号整数数组。它与函数 bitmapBuild 的作用相反。
语法
参数
bitmap— 要转换的位图。AggregateFunction(groupBitmap, T)。
返回值
返回一个由位图中包含的无符号整数组成的数组 Array(UInt*)。
示例
使用示例
bitmapTransform
自 v20.1 引入
通过将 from_array 中指定的位值替换为 to_array 中对应的位值,最多可以修改位图中的 N 个比特位。
语法
参数
bitmap— Bitmap 对象。AggregateFunction(groupBitmap, T)。 -from_array— 包含要被替换的原始置位比特的数组。Array(T)。 -to_array— 包含用于替换的新置位比特的数组。Array(T)。
返回值
返回一个根据给定映射关系完成元素转换的 bitmap。AggregateFunction(groupBitmap, T)
示例
用法示例
bitmapXor
自 v20.1 版本引入
计算两个位图的对称差(异或)。
语法
参数
bitmap1— 第一个 bitmap 对象。AggregateFunction(groupBitmap, T). -bitmap2— 第二个 bitmap 对象。AggregateFunction(groupBitmap, T).
返回值
返回一个 bitmap,其中包含在任一输入 bitmap 中、但不同时出现在两个 bitmap 中的已置位比特。AggregateFunction(groupBitmap, T)
示例
用法示例
bitmapXorCardinality
引入版本:v20.1
返回两个 bitmap 的 XOR(对称差)运算结果的基数。
语法
参数
bitmap1— 第一个位图对象。AggregateFunction(groupBitmap, T)bitmap2— 第二个位图对象。AggregateFunction(groupBitmap, T)
返回值
返回两个位图对称差中被置位的比特数,UInt64
示例
使用示例
subBitmap
自 v21.9 起引入
返回一个从位置 offset 开始的位图子集。返回位图的最大基数为 cardinality_limit。
语法
参数
bitmap— 位图对象。AggregateFunction(groupBitmap, T)。-offset— 从起始位置开始需要跳过的已置位位的数量(从零开始计数)。UInt32-cardinality_limit— 要包含在子集中的已置位位的最大数量。UInt32
返回值
返回一个位图,在按升序跳过 offset 个已置位位之后,最多包含 limit 个已置位位。AggregateFunction(groupBitmap, T)
示例
使用示例