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