Функции для битовых масок
bitmapBuild
Создаёт битовый массив из массива целочисленных значений.
bitmapBuild(array)
Аргументы
- array– массив типа- UInt*.
Пример
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)        │
└─────┴──────────────────────────────────────────────┘
bitmapToArray
Преобразует битовый массив в массив целочисленных значений.
bitmapToArray(bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
bitmapSubsetLimit
Создает подмножество битмапа с n элементами, расположенными между range_start и cardinality_limit.
Синтаксис
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
Аргументы
- bitmap– битмап. Bitmap object.
- 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] │
└───────────────────────────┘
subBitmap
Возвращает элементы битмапа, начиная с позиции offset. Число возвращаемых элементов ограничивается параметром cardinality_limit. Аналог строковой функции substring), но для битмапа.
Синтаксис
subBitmap(bitmap, offset, cardinality_limit)
Аргументы
- bitmap– битмап. Тип: Bitmap object.
- offset– позиция первого элемента возвращаемого подмножества. Тип: UInt32.
- cardinality_limit– максимальное число элементов возвращаемого подмножества. Тип: UInt32.
Возвращаемое значение
Подмножество битмапа.
Тип: Bitmap object.
Пример
Запрос:
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;
Результат:
┌─res─────────────────────────────┐
│ [10,11,12,13,14,15,16,17,18,19] │
└─────────────────────────────────┘
bitmapContains
Проверяет вхождение элемента в битовый массив.
bitmapContains(haystack, needle)
Аргументы
- haystack– объект Bitmap, в котором функция ищет значение.
- needle– значение, которое функция ищет. Тип — UInt32.
Возвращаемые значения
- 0 — если в haystackнетneedle.
- 1 — если в haystackестьneedle.
Тип — UInt8.
Пример
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res;
┌─res─┐
│  1  │
└─────┘
bitmapHasAny
Проверяет, имеют ли два битовых массива хотя бы один общий элемент.
bitmapHasAny(bitmap1, bitmap2)
Если вы уверены, что bitmap2 содержит строго один элемент, используйте функцию bitmapContains. Она работает эффективнее.
Аргументы
- bitmap*– массив любого типа с набором элементов.
Возвращаемые значения
- 1, если- bitmap1и- bitmap2имеют хотя бы один одинаковый элемент.
- 0, в противном случае.
Пример
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│  1  │
└─────┘
bitmapHasAll
Аналогично функции hasAll(array, array) возвращает 1 если первый битовый массив содержит все элементы второго, 0 в противном случае.
Если второй аргумент является пустым битовым массивом, то возвращает 1.
bitmapHasAll(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│  0  │
└─────┘
bitmapAnd
Логическое И для двух битовых массивов. Результат — новый битовый массив.
bitmapAnd(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
┌─res─┐
│ [3] │
└─────┘
bitmapOr
Логическое ИЛИ для двух битовых массивов. Результат — новый битовый массив.
bitmapOr(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
bitmapXor
Логическое исключающее ИЛИ для двух битовых массивов. Результат — новый битовый массив.
bitmapXor(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
┌─res───────┐
│ [1,2,4,5] │
└───────────┘
bitmapAndnot
Логическое отрицание И для двух битовых массивов. Результат — новый битовый массив.
bitmapAndnot(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
┌─res───┐
│ [1,2] │
└───────┘
bitmapCardinality
Возвращает кардинальность битового массива в виде значения типа UInt64.
bitmapCardinality(bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res;
┌─res─┐
│   5 │
└─────┘
bitmapAndCardinality
Выполняет логическое И и возвращает кардинальность (UInt64) результирующего битового массива.
bitmapAndCardinality(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│   1 │
└─────┘
bitmapOrCardinality
Выполняет логическое ИЛИ и возвращает кардинальность (UInt64) результирующего битового массива.
bitmapOrCardinality(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│   5 │
└─────┘
bitmapXorCardinality
Выполняет логическое исключающее ИЛИ и возвращает кардинальность (UInt64) результирующего битового массива.
bitmapXorCardinality(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│   4 │
└─────┘
bitmapAndnotCardinality
Выполняет логическое отрицание И и возвращает кардинальность (UInt64) результирующего битового массива.
bitmapAndnotCardinality(bitmap,bitmap)
Аргументы
- bitmap– битовый массив.
Пример
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
┌─res─┐
│   2 │
└─────┘