Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funciones de bitmap

Los bitmaps se pueden construir de dos formas. La primera utiliza la función de agregación groupBitmap con -State; la segunda consiste en construir un bitmap a partir de un Array.

bitmapAnd

Introducido en: v20.1.0

Calcula la conjunción lógica (AND) de dos bitmaps.

Sintaxis

bitmapAnd(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene los bits presentes en los dos bitmaps de entrada AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapAndCardinality

Introducido en: v20.1.0

Devuelve la cardinalidad de la conjunción lógica (AND) de dos bitmaps.

Sintaxis

bitmapAndCardinality(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve el número de bits activados en la intersección de los dos bitmaps UInt64

Ejemplos

Ejemplo de uso

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

bitmapAndnot

Introducido en: v20.1.0

Calcula la diferencia de conjuntos A AND-NOT B entre dos bitmaps.

Sintaxis

bitmapAndnot(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene los bits activados presentes en el primer bitmap, pero no en el segundo AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapAndnotCardinality

Introducido en: v20.1.0

Devuelve la cardinalidad de la operación AND-NOT entre dos bitmaps.

Sintaxis

bitmapAndnotCardinality(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve el número de bits activados en el resultado de bitmap1 AND-NOT bitmap2 UInt64

Ejemplos

Ejemplo de uso

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

bitmapBuild

Introducido en: v20.1.0

Crea un bitmap a partir de un array de enteros. Los tipos de elementos compatibles son enteros con signo y sin signo de 8, 16, 32 o 64 bits. Es la operación inversa de la función bitmapToArray.

Sintaxis

bitmapBuild(array)

Argumentos

Valor devuelto

Devuelve un bitmap a partir del array proporcionado AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

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

Introducido en: v20.1.0

Devuelve el número de bits activados (la cardinalidad) en el bitmap.

Sintaxis

bitmapCardinality(bitmap)

Argumentos

Valor devuelto

Devuelve el número de bits activados en el bitmap UInt64

Ejemplos

Ejemplo de uso

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

bitmapContains

Introducido en: v20.1.0

Comprueba si el bitmap contiene un elemento específico. El valor se compara como un entero sin signo del tipo de elemento del bitmap. En los bitmaps con signo, un elemento negativo coincide con su equivalente sin signo (por ejemplo, el valor Int8 -1 coincide con 255).

Sintaxis

bitmapContains(bitmap, value)

Argumentos

Valor devuelto

Devuelve 1 si el bitmap contiene el valor especificado; de lo contrario, 0 UInt8

Ejemplos

Ejemplo de uso

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

Bitmap con signo

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

bitmapHasAll

Introducido en: v20.1.0

Comprueba si el primer bitmap contiene todos los bits activados del segundo bitmap.

Sintaxis

bitmapHasAll(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve 1 si todos los bits activados del segundo bitmap están presentes en el primero; de lo contrario, 0 UInt8

Ejemplos

Ejemplo de uso

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

bitmapHasAny

Introducido en: v20.1.0

Comprueba si el primer bitmap contiene algún bit activado del segundo bitmap.

Sintaxis

bitmapHasAny(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve 1 si algún bit del segundo bitmap está presente en el primero; en caso contrario, 0 UInt8

Ejemplos

Ejemplo de uso

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

bitmapMax

Introducido en: v20.1.0

Devuelve el elemento de mayor valor de un bitmap, interpretado como un entero sin signo del tipo de elemento del bitmap. En los bitmaps con signo, los valores negativos se tratan como sus equivalentes sin signo (por ejemplo, el valor -1 de Int8 es 255). Devuelve 0 si el bitmap está vacío.

Sintaxis

bitmapMax(bitmap)

Argumentos

Valor devuelto

Devuelve el elemento mayor como un valor sin signo del tipo de elemento del bitmap, o 0 si el bitmap está vacío UInt64

Ejemplos

Ejemplo de uso

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

Bitmap con signo

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

bitmapMin

Introducido en: v20.1.0

Devuelve el elemento más pequeño de un bitmap, interpretado como un entero sin signo del tipo de elemento del bitmap. En los bitmaps con signo, los valores negativos se tratan como sus equivalentes sin signo (por ejemplo, el valor -128 de tipo Int8 equivale a 128). Si el bitmap está vacío, devuelve UINT32_MAX (UINT64_MAX si el tipo de elemento del bitmap tiene más de 32 bits).

Sintaxis

bitmapMin(bitmap)

Argumentos

Valor devuelto

Devuelve el elemento más pequeño como un valor sin signo del tipo de elemento del bitmap, o UINT32_MAX/UINT64_MAX si el bitmap está vacío UInt64

Ejemplos

Ejemplo de uso

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

Bitmap con signo

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

bitmapOr

Introducido en: v20.1.0

Calcula la disyunción lógica (OR) de dos bitmaps.

Sintaxis

bitmapOr(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene los bits activados presentes en cualquiera de los bitmaps de entrada AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapOrCardinality

Introducido en: v20.1.0

Devuelve la cardinalidad de la disyunción lógica (OR) de dos bitmaps.

Sintaxis

bitmapOrCardinality(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve el número de bits activados en la unión de los dos bitmaps UInt64

Ejemplos

Ejemplo de uso

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

bitmapSubsetInRange

Introducido en: v20.1.0

Devuelve un subconjunto del bitmap que contiene elementos en el rango de valores [start, end). Los valores de los elementos se comparan como enteros sin signo del tipo de elemento del bitmap.

Sintaxis

bitmapSubsetInRange(bitmap, start, end)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene solo los elementos en el rango de valores especificado AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapSubsetLimit

Introducido en: v20.1.0

Devuelve un subconjunto de como máximo cardinality_limit elementos cuyos valores son mayores o iguales que range_start, seleccionando los menores valores en orden sin signo.

Sintaxis

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene como máximo cardinality_limit elementos con un valor sin signo igual o superior a range_start AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapToArray

Introducido en: v20.1.0

Convierte un bitmap en un array de sus elementos. El tipo de elemento del array coincide con el tipo de elemento T del bitmap (entero con o sin signo). Es la función opuesta a bitmapBuild.

Sintaxis

bitmapToArray(bitmap)

Argumentos

Valor devuelto

Devuelve un array de los elementos contenidos en el bitmap Array(T)

Ejemplos

Ejemplo de uso

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

Bitmap con signo

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

bitmapTransform

Introducido en: v20.1.0

Reemplaza elementos de un bitmap según una correspondencia entre from_array y to_array. Los valores se interpretan como enteros sin signo del tipo de elemento del bitmap (el mismo dominio que bitmapContains). En los bitmaps con signo, un elemento negativo coincide con su equivalente sin signo (por ejemplo, el valor Int8 -1 coincide con 255). Un valor de to_array que no cabe en el tipo de elemento del bitmap genera BAD_ARGUMENTS. Un valor de from_array que no cabe simplemente no se encuentra, por lo que no se aplica el reemplazo correspondiente.

Sintaxis

bitmapTransform(bitmap, from_array, to_array)

Argumentos

  • bitmap — Objeto bitmap. AggregateFunction(groupBitmap, T). - from_array — Array de bits activados originales que se van a reemplazar. Array(T). - to_array — Array de nuevos bits activados con los que se realizará el reemplazo. Array(T).

Valor devuelto

Devuelve un bitmap cuyos elementos se transforman según el mapeo indicado AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

Bitmap con signo

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

bitmapXor

Introducido en: v20.1.0

Calcula la diferencia simétrica (XOR) entre dos bitmaps.

Sintaxis

bitmapXor(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve un bitmap que contiene los bits activados presentes en cualquiera de los bitmap de entrada, pero no en ambos AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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

bitmapXorCardinality

Introducido en: v20.1.0

Devuelve la cardinalidad del XOR (diferencia simétrica) de dos bitmaps.

Sintaxis

bitmapXorCardinality(bitmap1, bitmap2)

Argumentos

Valor devuelto

Devuelve el número de bits activados en la diferencia simétrica de los dos bitmaps UInt64

Ejemplos

Ejemplo de uso

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

subBitmap

Introducido en: v21.9.0

Devuelve un subconjunto del bitmap tras omitir offset elementos en orden ascendente de valores sin signo. La cardinalidad máxima del bitmap devuelto es cardinality_limit.

Sintaxis

subBitmap(bitmap, offset, cardinality_limit)

Argumentos

  • bitmap — Objeto bitmap. AggregateFunction(groupBitmap, T). - offset — Número de bits activados que se omiten desde el principio (indexado desde cero). UInt32 - cardinality_limit — Número máximo de bits activados que se incluirán en el subconjunto. UInt32

Valor devuelto

Devuelve un bitmap que contiene como máximo cardinality_limit elementos tras omitir offset elementos en orden ascendente de valores sin signo AggregateFunction(groupBitmap, T)

Ejemplos

Ejemplo de uso

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