9.4 KiB
Функции для битмапов
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] │
└───────────────────────────┘
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 │
└─────┘