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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
array— Array de inteiros.Array((U)Int*)
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— objeto bitmap.AggregateFunction(groupBitmap, T). -value— Elemento a ser verificado. (U)Int8/16/32/64
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap— bitmap da qual extrair o subconjunto.AggregateFunction(groupBitmap, T). -start— Início do intervalo (inclusivo).UInt*-end— Fim do intervalo (exclusivo).UInt*
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T). -range_start— Início do intervalo (inclusivo).UInt32-cardinality_limit— Cardinalidade máxima do subconjunto.UInt32
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
bitmap— bitmap a ser convertido.AggregateFunction(groupBitmap, T).
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
bitmap— Objeto bitmap.AggregateFunction(groupBitmap, T). -from_array— Array dos bits definidos originais a serem substituídos.Array(T). -to_array— Array dos novos bits definidos a serem usados na substituição.Array(T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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
bitmap1— Primeiro objeto bitmap.AggregateFunction(groupBitmap, T). -bitmap2— Segundo objeto bitmap.AggregateFunction(groupBitmap, T).
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] │
└───────┘