You need to enable JavaScript to run this app.
导航
Bit & Bitmap 函数
最近更新时间:2024.11.25 12:55:24首次发布时间:2022.02.28 12:33:06

bitTest

取任意整数并将其转换为[二进制形式]。
语法

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              │
└────────────────┘

bitTestAll

返回给定位置上所有位的 [逻辑与](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) 当且仅当其所有位置都为真 ( index1index2, ⋀ index3index4) 时才为真。

返回值
返回逻辑连接的结果。
类型: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                             │
└───────────────────────────────┘

bitTestAny

返回给定位置上所有位的 [逻辑或](或运算符)的结果。从右到左,倒数从 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

将两个位图进行相加计算,结果是一个新的位图。
语法

bitmapAnd(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 位图对象

示例

SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;

结果:

┌─res─┐
│ [3] │
└─────┘

bitmapAnd

两个位图的和计算,返回 UInt64 类型的基数。
语法

bitmapAndCardinality(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 类型中的基数UInt64

类型:Uint64
示例

SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;

结果:

┌─res─┐
│ 1   │
└─────┘

bitmapAndnot

两个位图的和不进行计算,结果是一个新的位图。
语法

bitmapAndnot(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 位图对象

类型:Bitmap object
示例

SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;

结果:

┌─res────┐
│ [1, 2] │
└────────┘
纯文本

bitmapAndnotCardinality

两个位图的与不计算,返回 UInt64 类型的基数。
语法

bitmapAndnotCardinality(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 中的基数UInt64

类型:UInt64
示例

SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;

结果:

┌─res─┐
│ 2   │
└─────┘

bitmapBuild

从无符号整数数组构建位图。
语法

bitmapBuild(array)

参数

  • array– 无符号整数数组。

返回值

  • 位图对象

类型:Bitmap object
示例

SELECT toTypeName(bitmapBuild([1, 2, 3, 4, 5]));

结果:

┌─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─┐
│ AggregateFunction(groupBitmap, UInt8)    │
└──────────────────────────────────────────┘

bitmapCardinality

返回 UInt64 类型的位图基数。
语法

bitmapCardinality(bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 类型中的位图基数UInt64

类型:UInt64
示例

SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res;

结果:

┌─res─┐
│ 5   │
└─────┘

bitmapContains

检查位图是否包含元素。
语法

bitmapContains(haystack, needle)

参数

  • haystack– [位图对象],函数在其中搜索。
  • needle– 函数搜索的值。类型:[UInt32]。

返回值

  • 0 — 如果haystack不包含needle
  • 1 — 如果haystack包含needle

类型:UInt8
示例

SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res;

结果:

┌─res─┐
│ 1   │
└─────┘

bitmapHasAll

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

检查两个位图是否有某些元素的交集。
语法

bitmapHasAny(bitmap1, bitmap2)

如果您确定bitmap2只包含一个元素,请考虑使用 [bitmapContains] 函数。它工作得更有效率。
参数

  • bitmap*– 位图对象。

返回值

  • 1,若bitmap1bitmap2至少有一个相似元素。
  • 0, 否则。

示例

SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;

结果:

┌─res─┐
│ 1   │
└─────┘

bitmapMax

返回集合中 UInt64 类型的最大值,如果集合为空则返回 0。
语法

bitmapMax(bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 返回集合中 UInt64 类型的最大值。

类型:UInt64
示例

SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;

结果:

┌─res─┐
│ 5   │
└─────┘

bitmapMin

返回集合中 UInt64 类型的最小值,如果集合为空,则返回 UINT32_MAX。
语法

bitmapMin(bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 返回集合中 UInt64 类型的最小值。

类型:UInt64
示例

SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res;

结果:

┌─res─┐
│ 1   │
└─────┘

bitmapOr

两个位图进行或计算,结果是一个新的位图。

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] │
└─────────────────┘

bitmapOrCardinality

两个位图或计算,返回 UInt64 类型的基数。
语法

bitmapOrCardinality(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 以基数形式返回或计算结果。

类型:UInt64
示例

SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;

结果:

┌─res─┐
│ 5   │
└─────┘

bitmapSubsetInRange

返回指定范围内的子集(不包括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] │
└───────────────────────┘

bitmapSubsetLimit

创建位图的子集,其中包含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

将位图转换为整数数组。
语法

bitmapToArray(bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 数组。

类型:array
示例

SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;

结果:

┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘

bitmapXor

两个位图进行异或计算,结果是一个新的位图。

bitmapXor(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 位图对象

类型:Bitmap object
示例

SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;

结果:

┌─res──────────┐
│ [1, 2, 4, 5] │
└──────────────┘

bitmapXorCardinality

两个位图进行异或计算,返回 UInt64 类型的基数。
语法

bitmapXorCardinality(bitmap,bitmap)

参数

  • bitmap– 位图对象。

返回值

  • 位图对象

类型:Bitmap object
示例

SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;

结果:

┌─res─┐
│ 4   │
└─────┘

subBitmap

提取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] │
└─────────────────────────────────┘