位图函数

    位图对象有两种构造方法。一个是由聚合函数groupBitmapState构造的,另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。

    我们使用RoaringBitmap实际存储位图对象,当基数小于或等于32时,它使用Set保存。当基数大于32时,它使用RoaringBitmap保存。这也是为什么低基数集的存储更快的原因。

    有关RoaringBitmap的更多信息,请参阅:RoaringBitmap

    从无符号整数数组构建位图对象。

    参数

    • – 无符号整数数组.

    示例

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

    bitmapToArray

    将位图转换为整数数组。

    1. bitmapToArray(bitmap)

    参数

    • bitmap – 位图对象.

    示例

    1. SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res
    1. ┌─res─────────┐
    2. [1,2,3,4,5]
    3. └─────────────┘

    bitmapSubsetInRange

    将位图指定范围(不包含range_end)转换为另一个位图。

    1. bitmapSubsetInRange(bitmap, range_start, range_end)

    参数

    • bitmap – 位图对象.
    • range_start – 范围起始点(含).
    • range_end – 范围结束点(不含).

    示例

    1. 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
    1. ┌─res───────────────┐
    2. [30,31,32,33,100]
    3. └───────────────────┘

    bitmapSubsetLimit

    将位图指定范围(起始点和数目上限)转换为另一个位图。

    1. bitmapSubsetLimit(bitmap, range_start, limit)

    参数

    • bitmap – 位图对象.
    • range_start – 范围起始点(含).
    • limit – 子位图基数上限.

    示例

    1. 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
    1. ┌─res───────────────────────┐
    2. [30,31,32,33,100,200,500]
    3. └───────────────────────────┘

    subBitmap

    将位图跳过offset个元素,限制大小为limit个的结果转换为另一个位图。

    1. subBitmap(bitmap, offset, limit)

    参数

    • bitmap – 位图对象.
    • offset – 跳过多少个元素.

    示例

    1. 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
    1. ┌─res─────────────────────────────┐
    2. [10,11,12,13,14,15,16,17,18,19]
    3. └─────────────────────────────────┘

    bitmapContains

    检查位图是否包含指定元素。

    1. bitmapContains(haystack, needle)
    • haystack – 位图对象.
    • needle – 元素,类型UInt32.

    示例

    1. SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res
    1. ┌─res─┐
    2. 1
    3. └─────┘

    hasAny(array,array)类似,如果位图有任何公共元素则返回1,否则返回0。
    对于空位图,返回0。

    参数

    • bitmap – bitmap对象。

    示例

    1. ┌─res─┐
    2. 1
    3. └─────┘

    bitmapHasAll

    hasAll(array,array)类似,如果第一个位图包含第二个位图的所有元素,则返回1,否则返回0。
    如果第二个参数是空位图,则返回1。

    1. bitmapHasAll(bitmap,bitmap)

    参数

    • bitmap – bitmap 对象。

    示例

    1. SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
    1. ┌─res─┐
    2. 0
    3. └─────┘

    位图和

    为两个位图对象进行与操作,返回一个新的位图对象。

    1. bitmapAnd(bitmap1,bitmap2)

    参数

    • bitmap1 – 位图对象。
    • bitmap2 – 位图对象。

    示例

    1. SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
    1. ┌─res─┐
    2. [3]
    3. └─────┘

    位图或

    为两个位图对象进行或操作,返回一个新的位图对象。

    1. bitmapOr(bitmap1,bitmap2)

    参数

    • bitmap1 – 位图对象。
    • bitmap2 – 位图对象。

    示例

    1. SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
    1. ┌─res─────────┐
    2. [1,2,3,4,5]
    3. └─────────────┘

    bitmapXor

    为两个位图对象进行异或操作,返回一个新的位图对象。

    1. bitmapXor(bitmap1,bitmap2)

    参数

    • bitmap1 – 位图对象。
    • bitmap2 – 位图对象。

    示例

    1. SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
    1. ┌─res───────┐
    2. [1,2,4,5]
    3. └───────────┘

    bitmapAndnot

    计算两个位图的差异,返回一个新的位图对象。

    1. bitmapAndnot(bitmap1,bitmap2)

    参数

    • bitmap1 – 位图对象。
    • bitmap2 – 位图对象。

    示例

      1. ┌─res───┐
      2. [1,2]
      3. └───────┘
      1. bitmapCardinality(bitmap)

      参数

      • bitmap – 位图对象。

      示例

      1. 5
      2. └─────┘

      bitmapMin

      返回一个UInt64类型的数值,表示位图中的最小值。如果位图为空则返回UINT32_MAX。

      1. bitmapMin(bitmap)

      参数

      • bitmap – 位图对象。

      示例

      1. SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res
      1. ┌─res─┐
      2. 1
      3. └─────┘

      bitmapMax

      返回一个UInt64类型的数值,表示位图中的最大值。如果位图为空则返回0。

      1. bitmapMax(bitmap)

      参数

      • bitmap – 位图对象。

      示例

      1. SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res
      1. ┌─res─┐
      2. 5
      3. └─────┘

      位图和标准性

      为两个位图对象进行与操作,返回结果位图的基数。

      1. bitmapAndCardinality(bitmap1,bitmap2)

      参数

      • bitmap1 – 位图对象。
      • bitmap2 – 位图对象。

      示例

      1. SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
      1. ┌─res─┐
      2. 1
      3. └─────┘

      bitmapOrCardinality

      为两个位图进行或运算,返回结果位图的基数。

      1. bitmapOrCardinality(bitmap1,bitmap2)

      参数

      • bitmap1 – 位图对象。
      • bitmap2 – 位图对象。

      示例

      1. SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
      1. ┌─res─┐
      2. 5
      3. └─────┘

      bitmapXorCardinality

      为两个位图进行异或运算,返回结果位图的基数。

      1. bitmapXorCardinality(bitmap1,bitmap2)

      参数

      • bitmap1 – 位图对象。
      • bitmap2 – 位图对象。

      示例

      1. SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
      1. ┌─res─┐
      2. 4
      3. └─────┘

      计算两个位图的差异,返回结果位图的基数。

      1. bitmapAndnotCardinality(bitmap1,bitmap2)

      参数

      • bitmap1 – 位图对象。
      • bitmap2 - 位图对象。
      1. ┌─res─┐
      2. 2