Битмапы можно создавать двумя способами. Первый — с помощью агрегатной функции groupBitmap с -State, второй — из объекта Array.
bitmapAnd
Добавленный в: v20.1.0
Вычисляет логическую операцию И (AND) для двух битмапов.
Синтаксис
bitmapAnd(bitmap1, bitmap2)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает битмап, содержащий биты, установленные в обоих входных битмапах 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает число установленных битов в пересечении двух битмапов 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает битмап, содержащий биты, установленные в первом битмапе, но не во втором 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— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает количество установленных битов в результате 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)Аргументы
array— Массив целых чисел.Array((U)Int*)
Возвращаемое значение
Возвращает битмап из переданного массива 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)Аргументы
bitmap— объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает количество установленных битов в битмапе UInt64
Примеры
Пример использования
SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res┌─res─┐
│ 4 │
└─────┘bitmapContains
Добавленный в: v20.1.0
Проверяет, содержит ли битмап указанный элемент. Значение сравнивается как беззнаковое целое число типа элемента битмапа. Для знаковых битмапов отрицательный элемент соответствует своему беззнаковому аналогу (например, значение Int8 -1 соответствует 255).
Синтаксис
bitmapContains(bitmap, value)Аргументы
bitmap— объект битмапа.AggregateFunction(groupBitmap, T). -value— Проверяемый элемент. (U)Int8/16/32/64
Возвращаемое значение
Возвращает 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает 1, если все установленные биты второго битмапа содержатся в первом битмапе; в противном случае — 0 UInt8
Примеры
Пример использования
SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res;┌─res─┐
│ 1 │
└─────┘bitmapHasAny
Добавленный в: v20.1.0
Проверяет, содержит ли первый битмап какие-либо установленные биты из второго битмапа.
Синтаксис
bitmapHasAny(bitmap1, bitmap2)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает 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)Аргументы
bitmap— объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает наибольший элемент в виде беззнакового значения типа элемента битмапа или 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)Аргументы
bitmap— объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает наименьший элемент в виде беззнакового значения типа элемента битмапа или 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает битмап, содержащий биты, установленные хотя бы в одном из входных битмапов 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает число установленных битов в объединении двух битмапов 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)Аргументы
bitmap— битмап, который нужно преобразовать.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Массив элементов, содержащихся в битмапе 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает битмап, содержащий биты, установленные только в одном из входных битмапов 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)Аргументы
bitmap1— Первый объект битмапа.AggregateFunction(groupBitmap, T). -bitmap2— Второй объект битмапа.AggregateFunction(groupBitmap, T).
Возвращаемое значение
Возвращает количество установленных битов в симметрической разности двух битмапов 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] │
└───────┘