Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

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

bitmapAnd

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

Вычисляет логическую операцию И (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.0

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

Синтаксис

bitmapAndCardinality(bitmap1, bitmap2)

Аргументы

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

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

Аргументы

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

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

Создаёт битмап из массива целых чисел. Поддерживаются знаковые и беззнаковые целые числа размером 8, 16, 32 или 64 бит. Это функция, обратная bitmapToArray.

Синтаксис

bitmapBuild(array)

Аргументы

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

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

Примеры

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

-- A bitmap is a binary value, so it is shown with `hex`.
SELECT hex(bitmapBuild([1, 2, 3, 4, 5])) AS res, toTypeName(bitmapBuild([1, 2, 3, 4, 5])) AS type;
┌─res────────────┬─type──────────────────────────────────┐
│ 00050102030405 │ AggregateFunction(groupBitmap, UInt8) │
└────────────────┴───────────────────────────────────────┘

Знаковый битмап

-- A bitmap is a binary value, so it is shown with `hex`.
SELECT hex(bitmapBuild([-128, -1]::Array(Int8))) AS res, toTypeName(bitmapBuild([-128, -1]::Array(Int8))) AS type;
┌─res──────┬─type─────────────────────────────────┐
│ 000280FF │ AggregateFunction(groupBitmap, Int8) │
└──────────┴──────────────────────────────────────┘

bitmapCardinality

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

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

Синтаксис

bitmapCardinality(bitmap)

Аргументы

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

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

Примеры

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

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

bitmapContains

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

Проверяет, содержит ли битмап указанный элемент. Значение сравнивается как беззнаковое целое число типа элемента битмапа. Для знаковых битмапов отрицательный элемент соответствует своему беззнаковому аналогу (например, значение Int8 -1 соответствует 255).

Синтаксис

bitmapContains(bitmap, value)

Аргументы

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

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

Примеры

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

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

Знаковый битмап

SELECT bitmapContains(bitmapBuild([-1]::Array(Int8)), 255) AS res;
┌─res─┐
│   1 │
└─────┘

bitmapHasAll

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

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

Синтаксис

bitmapHasAll(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapHasAny

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

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

Синтаксис

bitmapHasAny(bitmap1, bitmap2)

Аргументы

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

Возвращает 1, если хотя бы один бит второго битмапа есть в первом битмапе, иначе — 0 UInt8

Примеры

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

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

bitmapMax

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

Возвращает наибольший элемент битмапа, интерпретируемый как беззнаковое целое число типа элемента битмапа. Для знаковых битмапов отрицательные значения рассматриваются как соответствующие им беззнаковые значения (например, значение Int8 -1 равно 255). Возвращает 0, если битмап пуст.

Синтаксис

bitmapMax(bitmap)

Аргументы

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

Возвращает наибольший элемент в виде беззнакового значения типа элемента битмапа или 0, если битмап пуст UInt64

Примеры

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

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

Знаковый битмап

SELECT bitmapMax(bitmapBuild([-128, -1]::Array(Int8))) AS res;
┌─res─┐
│ 255 │
└─────┘

bitmapMin

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

Возвращает наименьший элемент битмапа, интерпретируемый как беззнаковое целое число типа элементов битмапа. Для знаковых битмапов отрицательные значения рассматриваются как соответствующие им беззнаковые значения (например, значение -128 типа Int8 интерпретируется как 128). Если битмап пуст, возвращает UINT32_MAX (UINT64_MAX, если тип элементов битмапа шире 32 бит).

Синтаксис

bitmapMin(bitmap)

Аргументы

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

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

Примеры

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

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

Знаковый битмап

SELECT bitmapMin(bitmapBuild([-128, -1]::Array(Int8))) AS res;
┌─res─┐
│ 128 │
└─────┘

bitmapOr

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

Вычисляет логическую операцию 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.0

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

Синтаксис

bitmapOrCardinality(bitmap1, bitmap2)

Аргументы

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

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

Примеры

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

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

bitmapSubsetInRange

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

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

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

Синтаксис

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Аргументы

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

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

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

Примеры

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

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

bitmapToArray

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

Преобразует битмап в массив его элементов. Тип элементов массива соответствует типу элементов битмапа T (знаковое или беззнаковое целое число). Это функция, обратная bitmapBuild.

Синтаксис

bitmapToArray(bitmap)

Аргументы

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

Массив элементов, содержащихся в битмапе Array(T)

Примеры

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

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

Знаковый битмап

SELECT arraySort(bitmapToArray(bitmapBuild([-128, -1]::Array(Int8)))) AS res;
┌─res───────┐
│ [-128,-1] │
└───────────┘

bitmapTransform

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

Заменяет элементы битмапа в соответствии с отображением из from_array в to_array. Значения интерпретируются как беззнаковые целые числа типа элементов битмапа (в том же домене, что и bitmapContains). Для знаковых битмапов отрицательный элемент соответствует своему беззнаковому аналогу (например, значение Int8 -1 соответствует 255). Значение в to_array, не помещающееся в тип элемента битмапа, вызывает BAD_ARGUMENTS. Значение в from_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] │
└───────────────┘

Знаковый битмап

SELECT arraySort(bitmapToArray(bitmapTransform(bitmapBuild([-1, 0]::Array(Int8)), [255], [10]))) AS res;
┌─res────┐
│ [0,10] │
└────────┘

bitmapXor

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

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

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

Синтаксис

bitmapXorCardinality(bitmap1, bitmap2)

Аргументы

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

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

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

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

Примеры

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

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