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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
array— Array de enteros.Array((U)Int*)
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T). -value— Elemento cuya presencia se debe comprobar. (U)Int8/16/32/64
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Bitmap del que extraer el subconjunto.AggregateFunction(groupBitmap, T). -start— Inicio del rango (inclusivo).UInt*-end— Fin del rango (exclusivo).UInt*
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T). -range_start— Inicio del rango (inclusivo).UInt32-cardinality_limit— Cardinalidad máxima del subconjunto.UInt32
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
bitmap— Bitmap que se convertirá.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primer objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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] │
└───────┘