Bitmap functions¶
The following functions are used to work with bitmaps.
Bitmaps can be constructed in two ways. The first way is constructed by aggregation function groupBitmap with -State, the other way is to constructed a bitmap from an Array object.
bitmapBuild¶
Builds a bitmap from an unsigned integer array.
Syntax¶
bitmapBuild(array)
Arguments¶
array– Unsigned integer array.
Example¶
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res)
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐ │ │ AggregateFunction(groupBitmap, UInt8) │ └─────┴──────────────────────────────────────────────┘
bitmapToArray¶
Converts bitmap to an integer array.
Syntax¶
bitmapToArray(bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res
Result:
┌─res─────────┐ │ [1,2,3,4,5] │ └─────────────┘
bitmapSubsetInRange¶
Returns the subset of a bitmap with bits within a value interval.
Syntax¶
bitmapSubsetInRange(bitmap, range_start, range_end)
Arguments¶
bitmap– Bitmap object.range_start– Start of the range (inclusive). UInt32.range_end– End of the range (exclusive). UInt32.
Example¶
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
Result:
┌─res───────────────┐ │ [30,31,32,33,100] │ └───────────────────┘
bitmapSubsetLimit¶
Returns a subset of a bitmap with smallest bit value range_start and at most cardinality_limit elements.
Syntax¶
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
Arguments¶
bitmap– Bitmap object.range_start– Start of the range (inclusive). UInt32.cardinality_limit– Maximum cardinality of the subset. UInt32.
Example¶
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
Result:
┌─res───────────────────────┐ │ [30,31,32,33,100,200,500] │ └───────────────────────────┘
subBitmap¶
Returns a subset of the bitmap, starting from position offset. The maximum cardinality of the returned bitmap is cardinality_limit.
Syntax¶
subBitmap(bitmap, offset, cardinality_limit)
Arguments¶
bitmap– The bitmap. Bitmap object.offset– The position of the first element of the subset. UInt32.cardinality_limit– The maximum number of elements in the subset. UInt32.
Example¶
SELECT bitmapToArray(subBitmap(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(10), toUInt32(10))) AS res
Result:
┌─res─────────────────────────────┐ │ [10,11,12,13,14,15,16,17,18,19] │ └─────────────────────────────────┘
bitmapContains¶
Checks whether the bitmap contains an element.
bitmapContains(bitmap, needle)
Arguments¶
bitmap– Bitmap object.needle– Searched bit value. UInt32.
Returned values¶
- 0: If
bitmapdoesn't containneedle. UInt8. - 1: If
bitmapcontainsneedle. UInt8.
Example¶
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res
Result:
┌─res─┐ │ 1 │ └─────┘
bitmapHasAny¶
Checks whether two bitmaps intersect.
If bitmap2 contains exactly one element, consider using bitmapContains instead as it works more efficiently.
Syntax¶
bitmapHasAny(bitmap1, bitmap2)
Arguments¶
bitmap1– Bitmap object 1.bitmap2– Bitmap object 2.
Return values¶
1, ifbitmap1andbitmap2have at least one shared element.0, otherwise.
Example¶
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 1 │ └─────┘
bitmapHasAll¶
Returns 1 if the first bitmap contains all elements of the second bitmap, otherwise 0. If the second bitmap is empty, returns 1.
Also see hasAll(array, array).
Syntax¶
bitmapHasAll(bitmap1, bitmap2)
Arguments¶
bitmap1– Bitmap object 1.bitmap2– Bitmap object 2.
Example¶
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 0 │ └─────┘
bitmapCardinality¶
Returns the cardinality of a bitmap.
Syntax¶
bitmapCardinality(bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res
Result:
┌─res─┐ │ 5 │ └─────┘
bitmapMin¶
Computes the smallest bit set in a bitmap, or UINT32_MAX if the bitmap is empty.
Syntax¶
bitmapMin(bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res
Result:
┌─res─┐ │ 1 │ └─────┘
bitmapMax¶
Computes the greatest bit set in a bitmap, or 0 if the bitmap is empty.
Syntax¶
bitmapMax(bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res
Result:
┌─res─┐ │ 5 │ └─────┘
bitmapTransform¶
Replaces at most N bits in a bitmap. The old and new value of the i-th replaced bit is given by from_array[i] and to_array[i].
The result depends on the array ordering if from_array and to_array.
Syntax¶
bitmapTransform(bitmap, from_array, to_array)
Arguments¶
bitmap– Bitmap object.from_array– UInt32 array. For idx in range [0, from_array.size()), if bitmap contains from_array[idx], then replace it with to_array[idx].to_array– UInt32 array with the same size asfrom_array.
Example¶
SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), cast([5,999,2] as Array(UInt32)), cast([2,888,20] as Array(UInt32)))) AS res
Result:
┌─res───────────────────┐ │ [1,3,4,6,7,8,9,10,20] │ └───────────────────────┘
bitmapAnd¶
Computes the logical conjunction of two bitmaps.
Syntax¶
bitmapAnd(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
Result:
┌─res─┐ │ [3] │ └─────┘
bitmapOr¶
Computes the logical disjunction of two bitmaps.
Syntax¶
bitmapOr(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
Result:
┌─res─────────┐ │ [1,2,3,4,5] │ └─────────────┘
bitmapXor¶
Xor-s two bitmaps.
Syntax¶
bitmapXor(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
Result:
┌─res───────┐ │ [1,2,4,5] │ └───────────┘
bitmapAndnot¶
Computes the logical conjunction of two bitmaps and negates the result.
Syntax¶
bitmapAndnot(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
Result:
┌─res───┐ │ [1,2] │ └───────┘
bitmapAndCardinality¶
Returns the cardinality of the logical conjunction of two bitmaps.
Syntax¶
bitmapAndCardinality(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 1 │ └─────┘
bitmapOrCardinality¶
Returns the cardinality of the logical disjunction of two bitmaps.
bitmapOrCardinality(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 5 │ └─────┘
bitmapXorCardinality¶
Returns the cardinality of the XOR of two bitmaps.
bitmapXorCardinality(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 4 │ └─────┘
bitmapAndnotCardinality¶
Returns the cardinality of the AND-NOT operation of two bitmaps.
bitmapAndnotCardinality(bitmap,bitmap)
Arguments¶
bitmap– Bitmap object.
Example¶
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
Result:
┌─res─┐ │ 2 │ └─────┘