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

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

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

bitmapAnd

Введено в: v20.1

Вычисляет логическое и (AND) двух битовых карт.

Синтаксис

bitmapAnd(bitmap1, bitmap2)

Аргументы

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

Возвращает битовую карту, содержащую биты, присутствующие в обеих входных битовых картах 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

Вычисляет логическое и двух битовых карт и отрицает результат (AND-NOT).

Синтаксис

bitmapAndnot(bitmap1, bitmap2)

Аргументы

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

Возвращает битовую карту, содержащую установленные биты, присутствующие в первой битовой карте, но не во второй 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)

Аргументы

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

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

Примеры

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

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

bitmapContains

Введено в: v20.1

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

Синтаксис

bitmapContains(bitmap, value)

Аргументы

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

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

Примеры

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

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

bitmapHasAll

Введено в: v20.1

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

Синтаксис

bitmapHasAll(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapHasAny

Введено в: v20.1

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

Синтаксис

bitmapHasAny(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapMax

Введено в: v20.1

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

Синтаксис

bitmapMax(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)

Аргументы

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

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

Примеры

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

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

bitmapOr

Введено в: v20.1

Вычисляет логическое или (OR) двух битовых карт.

Синтаксис

bitmapOr(bitmap1, bitmap2)

Аргументы

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

Возвращает битовую карту, содержащую установленные биты, присутствующие в любой входной битовой карте 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)

Аргументы

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

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

Примеры

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

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

bitmapSubsetInRange

Введено в: v20.1

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

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

Синтаксис

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Аргументы

  • bitmap — Битовая карта. AggregateFunction(groupBitmap, T).
  • range_start — Начало диапазона (включительно). UInt32
  • cardinality_limit — Максимальная кардинальность подмножества. UInt32

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

Возвращает битовую карту, содержащую максимум 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 — Битовая карта. 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

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

Синтаксис

bitmapXor(bitmap1, bitmap2)

Аргументы

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

Возвращает битовую карту, содержащую установленные биты, присутствующие в любой входной битовой карте, но не в обеих 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)

Аргументы

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

Возвращает количество установленных битов в симметрической разности двух битовых карт 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 — Битовая карта. AggregateFunction(groupBitmap, T).
  • offset — Количество установленных битов, которые нужно пропустить от начала (нумерация с нуля). UInt32
  • cardinality_limit — Максимальное число установленных битов, которые нужно включить в подмножество. UInt32

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

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

Примеры

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

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