Перейти к основному содержимому
Перейти к основному содержимому

Функции битмапов

Битмапы можно создавать двумя способами. Первый — с помощью агрегатной функции groupBitmap с суффиксом -State, второй — путём построения битмапа из объекта Array.

bitmapAnd

Добавлено в: v20.1.0

Вычисляет логическую конъюнкцию (AND) двух битмапов.

Синтаксис

bitmapAnd(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает bitmap, содержащий биты, установленные в обоих входных объектах bitmap AggregateFunction(groupBitmap, T).

Примеры

Пример использования

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

bitmapAndCardinality

Впервые представлена в версии v20.1.0

Возвращает мощность логического пересечения (AND) двух битмапов.

Синтаксис

bitmapAndCardinality(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает количество единичных битов в пересечении двух bitmap-объектов UInt64

Примеры

Пример использования

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

bitmapAndnot

Добавлена в версии: v20.1.0

Вычисляет разность множеств A AND-NOT B для двух битмапов.

Синтаксис

bitmapAndnot(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает bitmap, содержащий установленные биты, которые присутствуют в первом bitmap, но отсутствуют во втором AggregateFunction(groupBitmap, T).

Примеры

Пример использования

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

bitmapAndnotCardinality

Введена в версии: v20.1.0

Возвращает мощность результата операции AND-NOT над двумя битмапами.

Синтаксис

bitmapAndnotCardinality(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает количество установленных битов в результате bitmap1 AND-NOT bitmap2 UInt64

Примеры

Пример использования

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

bitmapBuild

Добавлена в версии: v20.1.0

Строит битмап из массива беззнаковых целых чисел. Противоположна функции bitmapToArray.

Синтаксис

bitmapBuild(array)

Аргументы

  • array — массив беззнаковых целых чисел. Array(UInt*)

Возвращаемое значение

Возвращает bitmap, построенный из переданного массива AggregateFunction(groupBitmap, T)

Примеры

Пример использования

SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)        │
└─────┴──────────────────────────────────────────────┘

bitmapCardinality

Добавлена в версии: v20.1.0

Возвращает количество установленных битов (кардинальность) в битмапе.

Синтаксис

bitmapCardinality(bitmap)

Аргументы

Возвращаемое значение

Возвращает количество установленных битов в битовой карте bitmap, значение типа UInt64.

Примеры

Пример использования

SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res
┌─res─┐
│   4 │
└─────┘

bitmapContains

Появилась в версии: v20.1.0

Проверяет, содержит ли bitmap заданный элемент.

Синтаксис

bitmapContains(bitmap, value)

Аргументы

Возвращаемое значение

Возвращает 1, если bitmap содержит указанное значение, иначе 0 UInt8

Примеры

Пример использования

SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res;
┌─res─┐
│  1  │
└─────┘

bitmapHasAll

Впервые появилась в версии: v20.1.0

Проверяет, содержит ли первый bitmap все биты, установленные во втором bitmap.

Синтаксис

bitmapHasAll(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает 1, если все установленные биты второго bitmap присутствуют в первом bitmap, в противном случае — 0 типа UInt8.

Примеры

Пример использования

SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res;
┌─res─┐
│  1  │
└─────┘

bitmapHasAny

Впервые появился в: v20.1.0

Проверяет, содержит ли первый битмап какие-либо установленные биты второго битмапа.

Синтаксис

bitmapHasAny(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает 1, если какие-либо биты второго bitmap присутствуют в первом bitmap, иначе — 0 UInt8

Примеры

Пример использования

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

bitmapMax

Введена в: v20.1.0

Возвращает позицию наибольшего установленного бита в битовой карте или 0, если битовая карта пуста.

Синтаксис

bitmapMax(bitmap)

Аргументы

Возвращаемое значение

Возвращает позицию старшего установленного бита в битовой карте, иначе 0. UInt64

Примеры

Пример использования

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

bitmapMin

Впервые появился в: v20.1.0

Возвращает позицию наименьшего установленного бита в битовой карте. Если все биты сброшены, возвращает UINT32_MAX (UINT64_MAX, если битовая карта содержит более 2^64 бит).

Синтаксис

bitmapMin(bitmap)

Аргументы

Возвращаемое значение

Возвращает позицию наименьшего бита, установленного в bitmap, или UINT32_MAX/UINT64_MAX UInt64.

Примеры

Пример использования

SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res;
┌─res─┐
│   2 │
└─────┘

bitmapOr

Впервые появился в: v20.1.0

Вычисляет логическую дизъюнкцию (OR) двух битмапов.

Синтаксис

bitmapOr(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает bitmap, содержащий биты, установленные хотя бы в одном из входных bitmap-объектов AggregateFunction(groupBitmap, T)

Примеры

Пример использования

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

bitmapOrCardinality

Введена в версии: v20.1.0

Возвращает количество единичных битов в результате логической дизъюнкции (OR) двух битмапов.

Синтаксис

bitmapOrCardinality(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает количество установленных (единичных) битов в объединении двух объектов bitmap UInt64

Примеры

Пример использования

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

bitmapSubsetInRange

Добавлено в: v20.1.0

Возвращает подмножество битовой карты, содержащее только установленные биты в указанном диапазоне [start, end). Использует 1-базовую индексацию.

Синтаксис

bitmapSubsetInRange(bitmap, start, end)

Аргументы

  • bitmap — битовая карта, из которой извлекается подмножество битов. AggregateFunction(groupBitmap, T). - start — начало диапазона (включительно). UInt* - end — конец диапазона (исключительно). UInt*

Возвращаемое значение

Возвращает битовую карту AggregateFunction(groupBitmap, T), содержащую только установленные биты в указанном диапазоне.

Примеры

Пример использования

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

bitmapSubsetLimit

Добавлена в: v20.1.0

Возвращает подмножество битовой карты, начиная с позиции range_start, с не более чем cardinality_limit установленными битами. Использует индексацию с единицы.

Синтаксис

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Аргументы

  • bitmap — объект bitmap. AggregateFunction(groupBitmap, T). - range_start — начало диапазона (включительно). UInt32 - cardinality_limit — максимальное количество элементов подмножества. UInt32

Возвращаемое значение

Возвращает bitmap, содержащий не более cardinality_limit установленных битов, начиная с range_start. AggregateFunction(groupBitmap, T)

Примеры

Пример использования

SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res;
┌─res────┐
│ [5, 3] │
└────────┘

bitmapToArray

Добавлена в версии v20.1.0

Преобразует bitmap в массив беззнаковых целых чисел. Является обратной функцией для bitmapBuild.

Синтаксис

bitmapToArray(bitmap)

Аргументы

Возвращаемое значение

Возвращает массив беззнаковых целых чисел из битовой карты Array(UInt*).

Примеры

Пример использования

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

bitmapTransform

Введена в версии: v20.1.0

Изменяет до N битов в битовой карте, заменяя определённые значения битов из from_array соответствующими значениями из to_array.

Синтаксис

bitmapTransform(bitmap, from_array, to_array)

Аргументы

  • bitmap — объект bitmap. AggregateFunction(groupBitmap, T). - from_array — массив исходных установленных битов, которые нужно заменить. Array(T). - to_array — массив новых установленных битов, которыми нужно заменить исходные. Array(T).

Возвращаемое значение

Возвращает битмап с элементами, преобразованными в соответствии с заданным отображением. AggregateFunction(groupBitmap, T)

Примеры

Пример использования

SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res;
┌─res───────────────┐
│ [1, 3, 5, 20, 40] │
└───────────────────┘

bitmapXor

Добавлена в версии: v20.1.0

Вычисляет симметрическую разность (XOR) двух битмапов.

Синтаксис

bitmapXor(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает bitmap, содержащий установленные биты, присутствующие хотя бы в одном из входных bitmap-объектов, но не одновременно в обоих. AggregateFunction(groupBitmap, T)

Примеры

Пример использования

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

bitmapXorCardinality

Добавлена в версии: v20.1.0

Возвращает мощность результата операции XOR (симметрической разности) над двумя битмапами.

Синтаксис

bitmapXorCardinality(bitmap1, bitmap2)

Аргументы

Возвращаемое значение

Возвращает количество установленных битов в симметрической разности двух объектов bitmap UInt64.

Примеры

Пример использования

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

subBitmap

Добавлено в: v21.9.0

Возвращает подмножество битовой карты, начиная с позиции offset. Максимальная возможная мощность возвращаемой битовой карты — cardinality_limit.

Синтаксис

subBitmap(bitmap, offset, cardinality_limit)

Аргументы

  • bitmap — объект bitmap. AggregateFunction(groupBitmap, T). - offset — количество установленных битов, которые нужно пропустить от начала (нумерация с нуля). UInt32 - cardinality_limit — максимальное количество установленных битов, включаемых в подмножество. UInt32

Возвращаемое значение

Возвращает bitmap, содержащий не более limit установленных битов, начиная после пропуска offset установленных битов в порядке возрастания. AggregateFunction(groupBitmap, T)

Примеры

Пример использования

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