Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Fonctions bitmap

Les bitmaps peuvent être construits de deux façons. La première consiste à utiliser la fonction d'agrégation groupBitmap avec -State ; la seconde à construire un bitmap à partir d'un objet Array.

bitmapAnd

Introduit dans : v20.1.0

Calcule la conjonction logique (AND) de deux bitmaps.

Syntaxe

bitmapAnd(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant les bits présents dans les deux bitmaps d’entrée AggregateFunction(groupBitmap, T)

Exemples

Exemple d’utilisation

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

bitmapAndCardinality

Introduit dans : v20.1.0

Renvoie la cardinalité de la conjonction logique (AND) de deux bitmaps.

Syntaxe

bitmapAndCardinality(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie le nombre de bits à 1 dans l’intersection des deux bitmaps UInt64

Exemples

Exemple d’utilisation

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

bitmapAndnot

Introduit dans : v20.1.0

Calcule la différence d'ensemble A AND-NOT B entre deux bitmaps.

Syntaxe

bitmapAndnot(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant les bits à 1 présents dans le premier bitmap, mais pas dans le second AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

bitmapAndnotCardinality

Introduit dans : v20.1.0

Renvoie la cardinalité de l’opération AND-NOT entre deux bitmaps.

Syntaxe

bitmapAndnotCardinality(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie le nombre de bits à 1 dans le résultat de bitmap1 AND-NOT bitmap2 UInt64

Exemples

Exemple d'utilisation

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

bitmapBuild

Introduit dans : v20.1.0

Crée un bitmap à partir d'un tableau d'entiers. Les types d’éléments pris en charge sont des entiers signés et non signés de 8, 16, 32 ou 64 bits. C'est l'inverse de la fonction bitmapToArray.

Syntaxe

bitmapBuild(array)

Arguments

Valeur renvoyée

Renvoie un bitmap à partir du tableau fourni AggregateFunction(groupBitmap, T)

Exemples

Exemple d’utilisation

-- 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) │
└────────────────┴───────────────────────────────────────┘

Bitmap signé

-- 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

Introduit dans : v20.1.0

Renvoie le nombre de bits à 1 (la cardinalité) dans le bitmap.

Syntaxe

bitmapCardinality(bitmap)

Arguments

Valeur renvoyée

Renvoie le nombre de bits à 1 dans le bitmap UInt64

Exemples

Exemple d'utilisation

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

bitmapContains

Introduit dans : v20.1.0

Vérifie si le bitmap contient un élément donné. La valeur est comparée en tant qu’entier non signé du type d’élément du bitmap. Pour les bitmaps signés, un élément négatif correspond à son équivalent non signé (par exemple, la valeur Int8 -1 correspond à 255).

Syntaxe

bitmapContains(bitmap, value)

Arguments

Valeur renvoyée

Renvoie 1 si le bitmap contient la valeur spécifiée, sinon 0 UInt8

Exemples

Exemple d'utilisation

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

Bitmap signé

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

bitmapHasAll

Introduit dans : v20.1.0

Vérifie si le premier bitmap contient tous les bits à 1 du second bitmap.

Syntaxe

bitmapHasAll(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie 1 si tous les bits à 1 du deuxième bitmap sont présents dans le premier bitmap, sinon 0 UInt8

Exemples

Exemple d'utilisation

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

bitmapHasAny

Introduit dans : v20.1.0

Vérifie si le premier bitmap contient au moins un des bits à 1 du second bitmap.

Syntaxe

bitmapHasAny(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie 1 si au moins un bit du deuxième bitmap est présent dans le premier bitmap, sinon 0 UInt8

Exemples

Exemple d'utilisation

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

bitmapMax

Introduit dans : v20.1.0

Renvoie le plus grand élément d’un bitmap, interprété comme un entier non signé du type d’élément du bitmap. Pour les bitmaps signés, les valeurs négatives sont traitées comme leurs équivalents non signés (par exemple, la valeur Int8 -1 correspond à 255). Renvoie 0 si le bitmap est vide.

Syntaxe

bitmapMax(bitmap)

Arguments

Valeur renvoyée

Renvoie le plus grand élément sous forme de valeur non signée du type d’élément du bitmap, ou 0 si le bitmap est vide UInt64

Exemples

Exemple d'utilisation

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

Bitmap signé

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

bitmapMin

Introduite dans : v20.1.0

Renvoie le plus petit élément d’un bitmap, interprété comme un entier non signé du type d’élément du bitmap. Pour les bitmaps signés, les valeurs négatives sont traitées comme leurs équivalents non signés (par exemple, la valeur Int8 -128 correspond à 128). Si le bitmap est vide, renvoie UINT32_MAX (UINT64_MAX si le type d’élément du bitmap dépasse 32 bits).

Syntaxe

bitmapMin(bitmap)

Arguments

Valeur renvoyée

Renvoie le plus petit élément sous forme de valeur non signée du type d’élément du bitmap, ou UINT32_MAX/UINT64_MAX si le bitmap est vide UInt64

Exemples

Exemple d’utilisation

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

Bitmap signé

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

bitmapOr

Introduit dans : v20.1.0

Calcule la disjonction logique (OR) de deux bitmaps.

Syntaxe

bitmapOr(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant les bits à 1 présents dans l'un ou l'autre des bitmaps d'entrée AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

bitmapOrCardinality

Introduit dans : v20.1.0

Renvoie la cardinalité de la disjonction logique (OR) de deux bitmaps.

Syntaxe

bitmapOrCardinality(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie le nombre de bits à 1 dans l'union des deux bitmaps UInt64

Exemples

Exemple d'utilisation

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

bitmapSubsetInRange

Introduit dans : v20.1.0

Renvoie un sous-ensemble du bitmap contenant les éléments dans la plage de valeurs [start, end). Les valeurs des éléments sont comparées en tant qu'entiers non signés du type d'élément du bitmap.

Syntaxe

bitmapSubsetInRange(bitmap, start, end)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant uniquement les éléments dans la plage de valeurs spécifiée AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

bitmapSubsetLimit

Introduit dans : v20.1.0

Renvoie un sous-ensemble d’au plus cardinality_limit éléments dont les valeurs sont supérieures ou égales à range_start, en sélectionnant les plus petites selon l’ordre non signé.

Syntaxe

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant au plus cardinality_limit éléments dont la valeur non signée est au moins range_start AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

bitmapToArray

Introduit dans : v20.1.0

Convertit un bitmap en un tableau contenant ses éléments. Le type d’élément du tableau correspond au type d’élément T du bitmap (entier signé ou non signé). C’est l’inverse de la fonction bitmapBuild.

Syntaxe

bitmapToArray(bitmap)

Arguments

Valeur renvoyée

Renvoie un tableau des éléments contenus dans le bitmap Array(T)

Exemples

Exemple d’utilisation

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

Bitmap signé

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

bitmapTransform

Introduit dans : v20.1.0

Remplace les éléments d’un bitmap selon une correspondance entre from_array et to_array. Les valeurs sont interprétées comme des entiers non signés du type d’élément du bitmap (même domaine que bitmapContains). Pour les bitmaps signés, un élément négatif correspond à son équivalent non signé (par exemple, la valeur Int8 -1 correspond à 255). Une valeur de to_array qui ne peut pas être représentée dans le type d’élément du bitmap lève BAD_ARGUMENTS. Une valeur de from_array qui ne peut pas être représentée n’est simplement pas trouvée, de sorte que le remplacement correspondant ne s’applique pas.

Syntaxe

bitmapTransform(bitmap, from_array, to_array)

Arguments

Valeur renvoyée

Renvoie un bitmap dont les éléments sont transformés selon la correspondance indiquée AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

Bitmap signé

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

bitmapXor

Introduit dans : v20.1.0

Calcule la différence symétrique (XOR) de deux bitmaps.

Syntaxe

bitmapXor(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie un bitmap contenant les bits à 1 présents dans l’un ou l’autre des bitmaps d’entrée, mais pas dans les deux AggregateFunction(groupBitmap, T)

Exemples

Exemple d'utilisation

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

bitmapXorCardinality

Introduit dans : v20.1.0

Renvoie la cardinalité du XOR (différence symétrique) de deux bitmaps.

Syntaxe

bitmapXorCardinality(bitmap1, bitmap2)

Arguments

Valeur renvoyée

Renvoie le nombre de bits à 1 dans la différence symétrique des deux bitmaps UInt64

Exemples

Exemple d'utilisation

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

subBitmap

Introduit dans : v21.9.0

Renvoie un sous-ensemble du bitmap après avoir ignoré offset éléments dans l’ordre croissant des valeurs non signées. La cardinalité maximale du bitmap renvoyé est cardinality_limit.

Syntaxe

subBitmap(bitmap, offset, cardinality_limit)

Arguments

  • bitmap — Objet bitmap. AggregateFunction(groupBitmap, T). - offset — Nombre de bits à 1 à ignorer depuis le début (indexation à partir de zéro). UInt32 - cardinality_limit — Nombre maximal de bits à 1 à inclure dans le sous-ensemble. UInt32

Valeur renvoyée

Renvoie un bitmap contenant au plus cardinality_limit éléments après omission de offset éléments dans l’ordre croissant des valeurs non signées AggregateFunction(groupBitmap, T)

Exemples

Exemple d’utilisation

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