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

Функции для битовых карт

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

bitmapAnd

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

Вычисляет логическую конъюнкцию (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

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

Синтаксис

bitmapAndCardinality(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapAndnot

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

Вычисляет разность множеств 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

Возвращает мощность результата операции 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.

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

Синтаксис

bitmapBuild(array)

Аргументы

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

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

Возвращает битмап, построенный на основе переданного массива 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

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

Синтаксис

bitmapCardinality(bitmap)

Аргументы

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

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

Примеры

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

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

bitmapContains

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

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

Синтаксис

bitmapContains(bitmap, value)

Аргументы

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

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

Примеры

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

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

bitmapHasAll

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

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

Синтаксис

bitmapHasAll(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapHasAny

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

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

Синтаксис

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, если битмап пуст.

Синтаксис

bitmapMax(bitmap)

Аргументы

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

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

Примеры

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

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

bitmapMin

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

Возвращает позицию наименьшего установленного бита в битовой карте. Если все биты сброшены — 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

Вычисляет логическую дизъюнкцию (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

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

Синтаксис

bitmapOrCardinality(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapSubsetInRange

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

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

Синтаксис

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

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

Синтаксис

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

Преобразует битовую карту в массив беззнаковых целых чисел. Является противоположностью функции bitmapBuild.

Синтаксис

bitmapToArray(bitmap)

Аргументы

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

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

Примеры

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

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

bitmapTransform

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

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

Синтаксис

bitmapTransform(bitmap, from_array, to_array)

Аргументы

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

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

Возвращает bitmap с элементами, преобразованными в соответствии с указанным отображением. 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

Вычисляет симметрическую разность (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

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

Синтаксис

bitmapXorCardinality(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

subBitmap

Введена в версии: v21.9

Возвращает подмножество битовой карты, начиная с позиции 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] │
└────────┘