Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funções de bitmap

Bitmaps podem ser construídos de duas formas. A primeira é por meio da função de agregação groupBitmap com -State; a outra é construir um bitmap a partir de um objeto Array.

bitmapAnd

Introduzido em: v20.1.0

Calcula a conjunção lógica (AND) de dois bitmaps.

Sintaxe

bitmapAnd(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna um bitmap contendo os bits presentes em ambos os bitmaps de entrada AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapAndCardinality

Introduzido em: v20.1.0

Retorna a cardinalidade da conjunção lógica (AND) de dois bitmaps.

Sintaxe

bitmapAndCardinality(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna o número de bits definidos na interseção entre os dois bitmaps UInt64

Exemplos

Exemplo de uso

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

bitmapAndnot

Introduzido em: v20.1.0

Calcula a diferença de conjuntos A AND-NOT B entre dois bitmaps.

Sintaxe

bitmapAndnot(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna um bitmap que contém os bits definidos presentes no primeiro bitmap, mas não no segundo AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapAndnotCardinality

Introduzido em: v20.1.0

Retorna a cardinalidade da operação AND-NOT entre dois bitmaps.

Sintaxe

bitmapAndnotCardinality(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna o número de bits definidos no resultado de bitmap1 AND-NOT bitmap2 UInt64

Exemplos

Exemplo de uso

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

bitmapBuild

Introduzido em: v20.1.0

Cria um bitmap a partir de um array de inteiros. Os tipos de elemento compatíveis são inteiros com e sem sinal de 8, 16, 32 ou 64 bits. É o oposto da função bitmapToArray.

Sintaxe

bitmapBuild(array)

Argumentos

Valor retornado

Retorna um bitmap do array fornecido AggregateFunction(groupBitmap, T)

Exemplos

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

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

Introduzido em: v20.1.0

Retorna o número de bits definidos (a cardinalidade) no bitmap.

Sintaxe

bitmapCardinality(bitmap)

Argumentos

Valor retornado

Retorna o número de bits definidos no bitmap UInt64

Exemplos

Exemplo de uso

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

bitmapContains

Introduzido em: v20.1.0

Verifica se o bitmap contém um elemento específico. O valor é comparado como um inteiro sem sinal do tipo de elemento do bitmap. Para bitmaps com sinal, um elemento negativo corresponde à sua contraparte sem sinal (por exemplo, o valor Int8 -1 corresponde a 255).

Sintaxe

bitmapContains(bitmap, value)

Argumentos

Valor retornado

Retorna 1 se o bitmap contiver o valor especificado; caso contrário, 0 UInt8

Exemplos

Exemplo de uso

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

bitmap assinado

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

bitmapHasAll

Introduzido em: v20.1.0

Verifica se o primeiro bitmap contém todos os bits definidos no segundo bitmap.

Sintaxe

bitmapHasAll(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna 1 se todos os bits definidos do segundo bitmap estiverem presentes no primeiro bitmap; caso contrário, 0 UInt8

Exemplos

Exemplo de uso

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

bitmapHasAny

Introduzido em: v20.1.0

Verifica se o primeiro bitmap contém algum dos bits definidos no segundo bitmap.

Sintaxe

bitmapHasAny(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna 1 se algum bit do segundo bitmap estiver presente no primeiro bitmap; caso contrário, 0 UInt8

Exemplos

Exemplo de uso

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

bitmapMax

Introduzido em: v20.1.0

Retorna o maior elemento de um bitmap, interpretado como um inteiro sem sinal do tipo de elemento do bitmap. Para bitmaps com sinal, valores negativos são tratados como suas contrapartes sem sinal (por exemplo, o valor Int8 -1 é 255). Retorna 0 se o bitmap estiver vazio.

Sintaxe

bitmapMax(bitmap)

Argumentos

Valor retornado

Retorna o maior elemento como um valor sem sinal do tipo de elemento do bitmap, ou 0 se o bitmap estiver vazio UInt64

Exemplos

Exemplo de uso

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

Bitmap assinado

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

bitmapMin

Introduzido em: v20.1.0

Retorna o menor elemento de um bitmap, interpretado como um inteiro sem sinal do tipo de elemento do bitmap. Em bitmaps com sinal, valores negativos são tratados como suas contrapartes sem sinal (por exemplo, o valor Int8 -128 equivale a 128). Se o bitmap estiver vazio, retorna UINT32_MAX (UINT64_MAX se o tipo de elemento do bitmap tiver mais de 32 bits).

Sintaxe

bitmapMin(bitmap)

Argumentos

Valor retornado

Retorna o menor elemento como um valor sem sinal do tipo de elemento do bitmap ou UINT32_MAX/UINT64_MAX se o bitmap estiver vazio UInt64

Exemplos

Exemplo de uso

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

bitmap assinado

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

bitmapOr

Introduzido em: v20.1.0

Calcula a disjunção lógica (OR) de dois bitmaps.

Sintaxe

bitmapOr(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna um bitmap contendo os bits definidos presentes em um ou outro bitmap de entrada AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapOrCardinality

Introduzido em: v20.1.0

Retorna a cardinalidade da disjunção lógica (OR) de dois bitmaps.

Sintaxe

bitmapOrCardinality(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna o número de bits definidos na união dos dois bitmaps UInt64

Exemplos

Exemplo de uso

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

bitmapSubsetInRange

Introduzido em: v20.1.0

Retorna um subconjunto do bitmap contendo elementos no intervalo de valores [start, end). Os valores dos elementos são comparados como inteiros sem sinal do tipo de elemento do bitmap.

Sintaxe

bitmapSubsetInRange(bitmap, start, end)

Argumentos

Valor retornado

Retorna um bitmap contendo apenas os elementos no intervalo de valores especificado AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapSubsetLimit

Introduzido em: v20.1.0

Retorna um subconjunto de no máximo cardinality_limit elementos cujos valores são maiores ou iguais a range_start, selecionando os menores valores nessa ordem sem sinal.

Sintaxe

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

Argumentos

Valor retornado

Retorna um bitmap contendo no máximo cardinality_limit elementos cujo valor sem sinal seja igual ou superior a range_start AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapToArray

Introduzido em: v20.1.0

Converte um bitmap em um array de seus elementos. O tipo de elemento do array corresponde ao tipo de elemento T do bitmap (inteiro com sinal ou sem sinal). É o oposto da função bitmapBuild.

Sintaxe

bitmapToArray(bitmap)

Argumentos

Valor retornado

Retorna um array com os elementos contidos no bitmap Array(T)

Exemplos

Exemplo de uso

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

Bitmap assinado

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

bitmapTransform

Introduzido em: v20.1.0

Substitui elementos em um bitmap de acordo com um mapeamento de from_array para to_array. Os valores são interpretados como inteiros sem sinal do tipo de elemento do bitmap (no mesmo domínio de bitmapContains). Para bitmaps com sinal, um elemento negativo corresponde à sua contraparte sem sinal (por exemplo, o valor Int8 -1 corresponde a 255). Um valor em to_array que não cabe no tipo de elemento do bitmap gera BAD_ARGUMENTS. Um valor em from_array que não cabe simplesmente não é encontrado, portanto a substituição correspondente não é aplicada.

Sintaxe

bitmapTransform(bitmap, from_array, to_array)

Argumentos

Valor retornado

Retorna um bitmap com os elementos transformados de acordo com o mapeamento fornecido AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

Bitmap assinado

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

bitmapXor

Introduzido em: v20.1.0

Calcula a diferença simétrica (XOR) entre dois bitmaps.

Sintaxe

bitmapXor(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna um bitmap contendo os bits definidos presentes em um ou outro bitmap de entrada, mas não em ambos AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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

bitmapXorCardinality

Introduzido em: v20.1.0

Retorna a cardinalidade do XOR (diferença simétrica) de dois bitmaps.

Sintaxe

bitmapXorCardinality(bitmap1, bitmap2)

Argumentos

Valor retornado

Retorna o número de bits definidos na diferença simétrica entre os dois bitmaps UInt64

Exemplos

Exemplo de uso

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

subBitmap

Introduzido na versão: v21.9.0

Retorna um subconjunto do bitmap após ignorar offset elementos em ordem crescente de valores sem sinal. A cardinalidade máxima do bitmap retornado é cardinality_limit.

Sintaxe

subBitmap(bitmap, offset, cardinality_limit)

Argumentos

  • bitmap — Objeto bitmap. AggregateFunction(groupBitmap, T). - offset — Número de bits definidos a ignorar desde o início (indexação começando em zero). UInt32 - cardinality_limit — Número máximo de bits definidos a incluir no subconjunto. UInt32

Valor retornado

Retorna um bitmap contendo no máximo cardinality_limit elementos após ignorar offset elementos em ordem crescente de valor sem sinal AggregateFunction(groupBitmap, T)

Exemplos

Exemplo de uso

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