ClickHouse/docs/fr/query_language/functions/bitmap_functions.md
2020-03-30 15:48:55 +03:00

10 KiB
Raw Blame History

machine_translated
true

Fonctions de Bitmap

Les fonctions Bitmap fonctionnent pour le calcul de la valeur de L'objet de deux bitmaps, il s'agit de renvoyer un nouveau bitmap ou une cardinalité tout en utilisant le calcul de la formule, tel que and, or, xor, and not, etc.

Il existe 2 types de méthodes de construction pour L'objet Bitmap. L'un doit être construit par la fonction d'agrégation groupBitmap avec-State, l'autre doit être construit par L'objet Array. Il est également de convertir L'objet Bitmap en objet tableau.

RoaringBitmap est enveloppé dans une structure de données pendant le stockage réel des objets Bitmap. Lorsque la cardinalité est inférieure ou égale à 32, elle utilise Set objet. Lorsque la cardinalité est supérieure à 32, elle utilise l'objet RoaringBitmap. C'est pourquoi le stockage de faible cardinalité jeu est plus rapide.

Pour plus d'informations sur RoaringBitmap, voir: CRoaring.

bitmapBuild

Construire un bitmap à partir d'un tableau entier non signé.

bitmapBuild(array)

Paramètre

  • array unsigned integer array.

Exemple

SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res)
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)    │
└─────┴──────────────────────────────────────────────┘

bitmapToArray

Convertir bitmap en tableau entier.

bitmapToArray(bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapSubsetInRange

Retourne le sous-ensemble dans la plage spécifiée (n'inclut pas le range_end).

bitmapSubsetInRange(bitmap, range_start, range_end)

Paramètre

  • bitmap Objet Bitmap.
  • range_start range start point. Type: UInt32.
  • range_end range end point(excluded). Type: UInt32.

Exemple

SELECT bitmapToArray(bitmapSubsetInRange(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
┌─res───────────────┐
│ [30,31,32,33,100] │
└───────────────────┘

bitmapSubsetLimit

Crée un sous-ensemble de bitmap avec n éléments pris entre range_start et cardinality_limit.

Syntaxe

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Paramètre

  • bitmap Objet Bitmap.
  • range_start The subset starting point. Type: UInt32.
  • cardinality_limit The subset cardinality upper limit. Type: UInt32.

Valeur renvoyée

Ensemble.

Type: Bitmap object.

Exemple

Requête:

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

Résultat:

┌─res───────────────────────┐
│ [30,31,32,33,100,200,500] │
└───────────────────────────┘

bitmapContains

Vérifie si le bitmap contient un élément.

bitmapContains(haystack, needle)

Paramètre

  • haystack Objet Bitmap où la fonction recherche.
  • needle Value that the function searches. Type: UInt32.

Valeurs renvoyées

  • 0 — If haystack ne contient pas de needle.
  • 1 — If haystack contenir needle.

Type: UInt8.

Exemple

SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res
┌─res─┐
│  1  │
└─────┘

bitmapHasAny

Vérifie si deux bitmaps ont une intersection par certains éléments.

bitmapHasAny(bitmap1, bitmap2)

Si vous êtes sûr que bitmap2 contient strictement un élément, envisagez d'utiliser le bitmapContains fonction. Cela fonctionne plus efficacement.

Paramètre

  • bitmap* bitmap object.

Les valeurs de retour

  • 1, si bitmap1 et bitmap2 avoir un élément similaire au moins.
  • 0, autrement.

Exemple

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

bitmapHasAll

Analogue à hasAll(array, array) renvoie 1 si le premier bitmap contient tous les éléments du second, 0 sinon. Si le deuxième argument est un bitmap vide, alors renvoie 1.

bitmapHasAll(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapCardinality

Retrun bitmap cardinalité de type UInt64.

bitmapCardinality(bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapMin

Retrun la plus petite valeur de type UInt64 dans l'ensemble, UINT32_MAX si l'ensemble est vide.

bitmapMin(bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapMax

Retrun la plus grande valeur de type UInt64 dans l'ensemble, 0 si l'ensemble est vide.

bitmapMax(bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapTransform

Transformer un tableau de valeurs d'une image à l'autre tableau de valeurs, le résultat est une nouvelle image.

bitmapTransform(bitmap, from_array, to_array)

Paramètre

  • bitmap bitmap object.
  • from_array UInt32 array. For idx in range [0, from_array.size()), if bitmap contains from_array[idx], then replace it with to_array[idx]. Note that the result depends on array ordering if there are common elements between from_array and to_array.
  • to_array UInt32 array, its size shall be the same to from_array.

Exemple

SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), cast([5,999,2] as Array(UInt32)), cast([2,888,20] as Array(UInt32)))) AS res
┌─res───────────────────┐
│ [1,3,4,6,7,8,9,10,20] │
└───────────────────────┘

bitmapAnd

Deux bitmap et calcul, le résultat est un nouveau bitmap.

bitmapAnd(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapOr

Deux bitmap ou calcul, le résultat est un nouveau bitmap.

bitmapOr(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapXor

Deux bitmap xor calcul, le résultat est une nouvelle image.

bitmapXor(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapetnot

Deux Bitmap andnot calcul, le résultat est un nouveau bitmap.

bitmapAndnot(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapetcardinalité

Deux bitmap et calcul, retour cardinalité de type UInt64.

bitmapAndCardinality(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapOrCardinality

Deux bitmap ou calcul, retour cardinalité de type UInt64.

bitmapOrCardinality(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapXorCardinality

Deux bitmap XOR calcul, retour cardinalité de type UInt64.

bitmapXorCardinality(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

bitmapetnotcardinality

Deux bitmap andnot calcul, retour cardinalité de type UInt64.

bitmapAndnotCardinality(bitmap,bitmap)

Paramètre

  • bitmap bitmap object.

Exemple

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

Article Original