取任意整数并将其转换为[二进制形式]。
语法
SELECT bitTest(number, index)
参数
number
– 整数。index
– 位的位置。返回值
返回指定位置的位值。
类型:UInt8
。
示例
例如,二进制数字系统中的数字 43 是 101011。
SELECT bitTest(43, 1);
结果:
┌─bitTest(43, 1)─┐ │ 1 │ └────────────────┘
另一个示例:
SELECT bitTest(43, 2);
结果:
┌─bitTest(43, 2)─┐ │ 0 │ └────────────────┘
返回给定位置上所有位的 [逻辑与](AND 运算符)的结果。从右到左,倒数从 0 开始。
按位运算的结合:
0 与 0 = 0
0 和 1 = 0
1 与 0 = 0
1 和 1 = 1
语法
SELECT bitTestAll(number, index1, index2, index3, index4, ...)
参数
number
– 整数。index1
, index2
, index3
, index4
– 位的位置。例如,对于位置集 ( index1
, index2
, index3
, index4
) 当且仅当其所有位置都为真 ( index1
⋀ index2
, ⋀ index3
⋀ index4
) 时才为真。返回值
返回逻辑连接的结果。
类型:UInt8
。
示例
例如,二进制数字系统中的数字 43 是 101011。
SELECT bitTestAll(43, 0, 1, 3, 5);
结果:
┌─bitTestAll(43, 0, 1, 3, 5)─┐ │ 1 │ └────────────────────────────┘
另一个示例:
SELECT bitTestAll(43, 0, 1, 3, 5, 2);
结果:
┌─bitTestAll(43, 0, 1, 3, 5, 2)─┐ │ 0 │ └───────────────────────────────┘
返回给定位置上所有位的 [逻辑或](或运算符)的结果。从右到左,倒数从 0 开始。
按位运算的析取:
0 或 0 = 0
0 或 1 = 1
1 或 0 = 1
1 或 1 = 1
语法
SELECT bitTestAny(number, index1, index2, index3, index4, ...)
参数
number
– 整数。index1
, index2
, index3
, index4
– 位的位置。返回值
返回逻辑分解的结果。
类型:UInt8
。
示例
例如,二进制数字系统中的数字 43 是 101011。
SELECT bitTestAny(43, 0, 2);
结果:
┌─bitTestAny(43, 0, 2)─┐ │ 1 │ └──────────────────────┘
另一个示例:
SELECT bitTestAny(43, 4, 2);
结果:
┌─bitTestAny(43, 4, 2)─┐ │ 0 │ └──────────────────────┘
将两个位图进行相加计算,结果是一个新的位图。
语法
bitmapAnd(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
示例
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
结果:
┌─res─┐ │ [3] │ └─────┘
两个位图的和计算,返回 UInt64 类型的基数。
语法
bitmapAndCardinality(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
UInt64
。类型:Uint64
示例
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 1 │ └─────┘
两个位图的和不进行计算,结果是一个新的位图。
语法
bitmapAndnot(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
类型:Bitmap object
。
示例
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
结果:
┌─res────┐ │ [1, 2] │ └────────┘ 纯文本
两个位图的与不计算,返回 UInt64 类型的基数。
语法
bitmapAndnotCardinality(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
UInt64
。类型:UInt64
示例
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 2 │ └─────┘
从无符号整数数组构建位图。
语法
bitmapBuild(array)
参数
array
– 无符号整数数组。返回值
类型:Bitmap object
。
示例
SELECT toTypeName(bitmapBuild([1, 2, 3, 4, 5]));
结果:
┌─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─┐ │ AggregateFunction(groupBitmap, UInt8) │ └──────────────────────────────────────────┘
返回 UInt64 类型的位图基数。
语法
bitmapCardinality(bitmap)
参数
bitmap
– 位图对象。返回值
UInt64
。类型:UInt64
。
示例
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res;
结果:
┌─res─┐ │ 5 │ └─────┘
检查位图是否包含元素。
语法
bitmapContains(haystack, needle)
参数
haystack
– [位图对象],函数在其中搜索。needle
– 函数搜索的值。类型:[UInt32]。返回值
haystack
不包含needle
。haystack
包含needle
。类型:UInt8
。
示例
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res;
结果:
┌─res─┐ │ 1 │ └─────┘
hasAll(array, array)
如果第一个位图包含第二个位图的所有元素,则类似于返回 1,否则返回 0。
如果第二个参数是空位图,则返回 1。
语法
bitmapHasAll(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
1
,如果第一个位图包含第二个位图的所有元素或第二个参数为空位图,则返回 1。0
, 否则。类型:UInt8
示例
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 0 │ └─────┘
检查两个位图是否有某些元素的交集。
语法
bitmapHasAny(bitmap1, bitmap2)
如果您确定bitmap2
只包含一个元素,请考虑使用 [bitmapContains] 函数。它工作得更有效率。
参数
bitmap*
– 位图对象。返回值
1
,若bitmap1
和bitmap2
至少有一个相似元素。0
, 否则。示例
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 1 │ └─────┘
返回集合中 UInt64 类型的最大值,如果集合为空则返回 0。
语法
bitmapMax(bitmap)
参数
bitmap
– 位图对象。返回值
类型:UInt64
示例
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;
结果:
┌─res─┐ │ 5 │ └─────┘
返回集合中 UInt64 类型的最小值,如果集合为空,则返回 UINT32_MAX。
语法
bitmapMin(bitmap)
参数
bitmap
– 位图对象。返回值
类型:UInt64
示例
SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res;
结果:
┌─res─┐ │ 1 │ └─────┘
两个位图进行或计算,结果是一个新的位图。
bitmapOr(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
类型:Bitmap object
。
示例
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
结果:
┌─res─────────────┐ │ [1, 2, 3, 4, 5] │ └─────────────────┘
两个位图或计算,返回 UInt64 类型的基数。
语法
bitmapOrCardinality(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
类型:UInt64
示例
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 5 │ └─────┘
返回指定范围内的子集(不包括range_end)。
语法
bitmapSubsetInRange(bitmap, range_start, range_end)
参数
bitmap
– [位图对象]。range_start
– 范围起点。类型:[UInt32]。range_end
– 范围终点(排除)。类型:[UInt32]。返回值
类型:array
示例
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] │ └───────────────────────┘
创建位图的子集,其中包含range_start
和之间的 n 个元素cardinality_limit
。
语法
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
参数
bitmap
– [位图对象]。range_start
– 子集的起点。类型:[UInt32]。cardinality_limit
– 子集基数上限。类型:[UInt32]。返回值
类型:Bitmap object
。
示例
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] │ └─────────────────────────────────┘
将位图转换为整数数组。
语法
bitmapToArray(bitmap)
参数
bitmap
– 位图对象。返回值
类型:array
。
示例
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
结果:
┌─res─────────────┐ │ [1, 2, 3, 4, 5] │ └─────────────────┘
两个位图进行异或计算,结果是一个新的位图。
bitmapXor(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
类型:Bitmap object
。
示例
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
结果:
┌─res──────────┐ │ [1, 2, 4, 5] │ └──────────────┘
两个位图进行异或计算,返回 UInt64 类型的基数。
语法
bitmapXorCardinality(bitmap,bitmap)
参数
bitmap
– 位图对象。返回值
类型:Bitmap object
。
示例
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
结果:
┌─res─┐ │ 4 │ └─────┘
提取bitmap中指定下标范围的子集数据,从offset位置开始。返回的位图的最大基数是cardinality_limit
。
语法
subBitmap(bitmap, offset, cardinality_limit)
参数
bitmap
- [位图对象]offset
- 子集中第一个元素的位置,UInt32 类型cardinality_limit
- 子集最大基数,UInt32 类型需要注意,offset从0开始,代表实际存储的第一个有效值,类似于数组下标。offset和 cardinality_limit 超过 bitmap 元素个数均无意义。
返回值
示例
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; --- 等价于 ByteHouse BitMap64类型如下写法 SELECT bitmapToArray(subBitmap(arrayToBitmap([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
┌─res─────────────────────────────┐ │ [10,11,12,13,14,15,16,17,18,19] │ └─────────────────────────────────┘