注意
该函数不适用于 ByteHouse 自研的 BitEngine 类型,详情请参考 BitEngine(自研)。
位图函数用于对两个位图对象进行计算,对于任何一个位图函数,它都将返回一个位图对象,例如and,or,xor,not等等。
位图对象有两种构造方法。一个是由聚合函数groupBitmapState构造的,另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。
我们使用RoaringBitmap实际存储位图对象,当基数小于或等于32时,它使用Set保存。当基数大于32时,它使用RoaringBitmap保存。这也是为什么低基数集的存储更快的原因。
有关RoaringBitmap的更多信息,请参阅:RoaringBitmap。
从无符号整数数组构建位图对象。
bitmapBuild(array)
参数
array
– 无符号整数数组.示例
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res
将位图转换为整数数组。
bitmapToArray(bitmap)
参数
bitmap
– 位图对象.示例
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res
┌─res─────────┐ │ [1,2,3,4,5] │ └─────────────┘
将位图指定范围(不包含range_end)转换为另一个位图。
bitmapSubsetInRange(bitmap, range_start, range_end)
参数
bitmap
– 位图对象.range_start
– 范围起始点(含).range_end
– 范围结束点(不含).示例
SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res
┌─res───────────────┐ │ [30,31,32,33,100] │ └───────────────────┘
将位图指定范围(起始点和数目上限)转换为另一个位图。
bitmapSubsetLimit(bitmap, range_start, limit)
参数
bitmap
– 位图对象.range_start
– 范围起始点(含).limit
– 子位图基数上限.示例
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res
┌─res───────────────────────┐ │ [30,31,32,33,100,200,500] │ └───────────────────────────┘
检查位图是否包含指定元素。
bitmapContains(haystack, needle)
参数
haystack
– 位图对象.needle
– 元素,类型UInt32.示例
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res
┌─res─┐ │ 1 │ └─────┘
与hasAny(array,array)
类似,如果位图有任何公共元素则返回1,否则返回0。 对于空位图,返回0。
bitmapHasAny(bitmap,bitmap)
参数
bitmap
– bitmap对象。示例
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
┌─res─┐ │ 1 │ └─────┘
与hasAll(array,array)
类似,如果第一个位图包含第二个位图的所有元素,则返回1,否则返回0。 如果第二个参数是空位图,则返回1。
bitmapHasAll(bitmap,bitmap)
参数
bitmap
– bitmap 对象。示例
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
┌─res─┐ │ 0 │ └─────┘
为两个位图对象进行与操作,返回一个新的位图对象。
bitmapAnd(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
┌─res─┐ │ [3] │ └─────┘
为两个位图对象进行或操作,返回一个新的位图对象。
bitmapOr(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
┌─res─────────┐ │ [1,2,3,4,5] │ └─────────────┘
为两个位图对象进行异或操作,返回一个新的位图对象。
bitmapXor(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
┌─res───────┐ │ [1,2,4,5] │ └───────────┘
计算两个位图的差异,返回一个新的位图对象。
bitmapAndnot(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
┌─res───┐ │ [1,2] │ └───────┘
返回一个UInt64类型的数值,表示位图对象的基数。
bitmapCardinality(bitmap)
参数
bitmap
– 位图对象。示例
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res
┌─res─┐ │ 5 │ └─────┘
返回一个UInt64类型的数值,表示位图中的最小值。如果位图为空则返回UINT32_MAX。
bitmapMin(bitmap)
参数
bitmap
– 位图对象。示例
SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res
┌─res─┐ │ 1 │ └─────┘
返回一个UInt64类型的数值,表示位图中的最大值。如果位图为空则返回0。
bitmapMax(bitmap)
参数
bitmap
– 位图对象。示例
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res
┌─res─┐ │ 5 │ └─────┘
为两个位图对象进行与操作,返回结果位图的基数。
bitmapAndCardinality(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐ │ 1 │ └─────┘
为两个位图进行或运算,返回结果位图的基数。
bitmapOrCardinality(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐ │ 5 │ └─────┘
为两个位图进行异或运算,返回结果位图的基数。
bitmapXorCardinality(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
– 位图对象。示例
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐ │ 4 │ └─────┘
计算两个位图的差异,返回结果位图的基数。
bitmapAndnotCardinality(bitmap1,bitmap2)
参数
bitmap1
– 位图对象。bitmap2
- 位图对象。示例
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐ │ 2 │ └─────┘