11 KiB
sidebar_position | sidebar_label |
---|---|
49 | Функции для битмапов |
Функции для битовых масок
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 │
└─────┘