2020-10-26 10:29:30 +00:00
---
2022-08-26 17:37:11 +00:00
slug: /ru/sql-reference/functions/bitmap-functions
2022-04-09 13:29:05 +00:00
sidebar_position: 49
sidebar_label: "Функции для битмапов"
2020-10-26 10:29:30 +00:00
---
# Функции для битовых масок {#bitmap-functions}
2019-06-09 17:39:45 +00:00
2020-03-22 09:14:59 +00:00
## bitmapBuild {#bitmap_functions-bitmapbuild}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Создаёт битовый массив из массива целочисленных значений.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapBuild(array)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `array` – массив типа `UInt*` .
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-14 10:29:16 +00:00
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
2021-04-01 20:33:54 +00:00
│ │ AggregateFunction(groupBitmap, UInt8) │
2019-06-14 10:29:16 +00:00
└─────┴──────────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
## bitmapToArray {#bitmaptoarray}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Преобразует битовый массив в массив целочисленных значений.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapToArray(bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
```
2019-10-28 19:03:25 +00:00
## bitmapSubsetLimit {#bitmapsubsetlimit}
2019-11-27 09:09:44 +00:00
Создает подмножество битмапа с n элементами, расположенными между `range_start` и `cardinality_limit` .
2019-10-28 19:03:25 +00:00
**Синтаксис**
2020-03-20 18:20:59 +00:00
``` sql
2019-10-28 19:03:25 +00:00
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-10-28 19:03:25 +00:00
2021-03-13 18:18:45 +00:00
- `bitmap` – битмап. [Bitmap object ](#bitmap_functions-bitmapbuild ).
- `range_start` – начальная точка подмножества. [UInt32 ](../../sql-reference/functions/bitmap-functions.md#bitmap-functions ).
2021-09-22 16:12:31 +00:00
- `cardinality_limit` – верхний предел подмножества. [UInt32 ](../../sql-reference/functions/bitmap-functions.md#bitmap-functions ).
2019-10-28 19:03:25 +00:00
**Возвращаемое значение**
2019-11-27 09:09:44 +00:00
Подмножество битмапа.
2019-10-28 19:03:25 +00:00
2021-09-22 16:12:31 +00:00
Тип: [Bitmap object ](#bitmap_functions-bitmapbuild ).
2019-10-28 19:03:25 +00:00
**Пример**
Запрос:
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res;
2019-10-28 19:03:25 +00:00
```
2021-03-13 18:18:45 +00:00
Результат:
2019-10-28 19:03:25 +00:00
2020-03-20 18:20:59 +00:00
``` text
2019-11-27 09:09:44 +00:00
┌─res───────────────────────┐
│ [30,31,32,33,100,200,500] │
└───────────────────────────┘
2019-10-28 19:03:25 +00:00
```
2021-09-22 16:12:31 +00:00
## subBitmap {#subbitmap}
Возвращает элементы битмапа, начиная с позиции `offset` . Число возвращаемых элементов ограничивается параметром `cardinality_limit` . Аналог строковой функции [substring ](string-functions.md#substring )), но для битмапа.
**Синтаксис**
``` sql
subBitmap(bitmap, offset, cardinality_limit)
```
**Аргументы**
- `bitmap` – битмап. Тип: [Bitmap object ](#bitmap_functions-bitmapbuild ).
- `offset` – позиция первого элемента возвращаемого подмножества. Тип: [UInt32 ](../../sql-reference/data-types/int-uint.md ).
- `cardinality_limit` – максимальное число элементов возвращаемого подмножества. Тип: [UInt32 ](../../sql-reference/data-types/int-uint.md ).
**Возвращаемое значение**
Подмножество битмапа.
Тип: [Bitmap object ](#bitmap_functions-bitmapbuild ).
**Пример**
Запрос:
``` sql
SELECT bitmapToArray(subBitmap(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(10), toUInt32(10))) AS res;
```
Результат:
``` text
┌─res─────────────────────────────┐
│ [10,11,12,13,14,15,16,17,18,19] │
└─────────────────────────────────┘
```
2020-03-22 09:14:59 +00:00
## bitmapContains {#bitmap_functions-bitmapcontains}
2019-07-30 06:47:38 +00:00
Проверяет вхождение элемента в битовый массив.
2020-03-20 18:20:59 +00:00
``` sql
2019-07-30 06:47:38 +00:00
bitmapContains(haystack, needle)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-07-30 06:47:38 +00:00
2020-03-21 04:11:51 +00:00
- `haystack` – [объект Bitmap ](#bitmap_functions-bitmapbuild ), в котором функция ищет значение.
2020-09-15 11:38:22 +00:00
- `needle` – значение, которое функция ищет. Тип — [UInt32 ](../../sql-reference/data-types/int-uint.md ).
2019-07-30 06:47:38 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- 0 — если в `haystack` нет `needle` .
- 1 — если в `haystack` есть `needle` .
2019-07-30 06:47:38 +00:00
Тип — `UInt8` .
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res;
2019-07-30 06:47:38 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-07-30 06:47:38 +00:00
┌─res─┐
│ 1 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapHasAny {#bitmaphasany}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Проверяет, имеют ли два битовых массива хотя бы один общий элемент.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-14 10:29:16 +00:00
bitmapHasAny(bitmap1, bitmap2)
2019-06-09 17:39:45 +00:00
```
2019-07-30 06:47:38 +00:00
Если вы уверены, что `bitmap2` содержит строго один элемент, используйте функцию [bitmapContains ](#bitmap_functions-bitmapcontains ). Она работает эффективнее.
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap*` – массив любого типа с набором элементов.
2019-06-14 10:29:16 +00:00
**Возвращаемые значения**
2020-03-21 04:11:51 +00:00
- `1` , если `bitmap1` и `bitmap2` имеют хотя бы один одинаковый элемент.
- `0` , в противном случае.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 1 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapHasAll {#bitmaphasall}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Аналогично функции `hasAll(array, array)` возвращает 1 если первый битовый массив содержит все элементы второго, 0 в противном случае.
Если второй аргумент является пустым битовым массивом, то возвращает 1.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapHasAll(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 0 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapAnd {#bitmapand}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Логическое И для двух битовых массивов. Результат — новый битовый массив.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapAnd(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ [3] │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapOr {#bitmapor}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Логическое ИЛИ для двух битовых массивов. Результат — новый битовый массив.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapOr(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
```
2020-03-20 18:20:59 +00:00
## bitmapXor {#bitmapxor}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Логическое исключающее ИЛИ для двух битовых массивов. Результат — новый битовый массив.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapXor(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res───────┐
│ [1,2,4,5] │
└───────────┘
```
2020-03-20 18:20:59 +00:00
## bitmapAndnot {#bitmapandnot}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Логическое отрицание И для двух битовых массивов. Результат — новый битовый массив.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapAndnot(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res───┐
│ [1,2] │
└───────┘
```
2020-03-20 18:20:59 +00:00
## bitmapCardinality {#bitmapcardinality}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Возвращает кардинальность битового массива в виде значения типа `UInt64` .
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapCardinality(bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res;
2019-06-09 17:39:45 +00:00
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 5 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapAndCardinality {#bitmapandcardinality}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Выполняет логическое И и возвращает кардинальность (`UInt64`) результирующего битового массива.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapAndCardinality(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 1 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapOrCardinality {#bitmaporcardinality}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Выполняет логическое ИЛИ и возвращает кардинальность (`UInt64`) результирующего битового массива.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapOrCardinality(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 5 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapXorCardinality {#bitmapxorcardinality}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Выполняет логическое исключающее ИЛИ и возвращает кардинальность (`UInt64`) результирующего битового массива.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapXorCardinality(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 4 │
└─────┘
```
2020-03-20 18:20:59 +00:00
## bitmapAndnotCardinality {#bitmapandnotcardinality}
2019-06-09 17:39:45 +00:00
2019-07-30 06:47:38 +00:00
Выполняет логическое отрицание И и возвращает кардинальность (`UInt64`) результирующего битового массива.
2019-06-09 17:39:45 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
bitmapAndnotCardinality(bitmap,bitmap)
```
2021-03-13 18:18:45 +00:00
**Аргументы**
2019-06-09 17:39:45 +00:00
2020-03-21 04:11:51 +00:00
- `bitmap` – битовый массив.
2019-06-09 17:39:45 +00:00
**Пример**
2020-03-20 18:20:59 +00:00
``` sql
2019-06-09 17:39:45 +00:00
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
2020-03-20 18:20:59 +00:00
``` text
2019-06-09 17:39:45 +00:00
┌─res─┐
│ 2 │
└─────┘
```