본문으로 바로가기
본문으로 바로가기

비트맵 함수

비트맵은 두 가지 방식으로 생성할 수 있습니다. 첫 번째 방식은 집계 함수 groupBitmap의 -State를 사용하여 생성하는 것이고, 다른 방식은 Array 객체에서 비트맵을 생성하는 것입니다.

bitmapAnd

도입된 버전: v20.1.0

두 비트맵의 논리곱(AND)을 계산합니다.

구문

bitmapAnd(bitmap1, bitmap2)

인수

반환값

두 입력 비트맵 AggregateFunction(groupBitmap, T)에 모두 존재하는 비트를 포함하는 비트맵을 반환합니다.

예시

사용 예시

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

bitmapAndCardinality

도입 버전: v20.1.0

두 비트맵에 대해 논리곱(AND) 연산을 수행한 결과의 기수(카디널리티)를 반환합니다.

구문

bitmapAndCardinality(bitmap1, bitmap2)

인수

반환 값

두 bitmap의 교집합에서 설정된 비트 수를 반환합니다. UInt64

예시

사용 예시

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

bitmapAndnot

도입 버전: v20.1.0

두 비트맵 A와 B에 대해 집합 차이 A AND-NOT B를 계산합니다.

구문

bitmapAndnot(bitmap1, bitmap2)

인수

반환 값

첫 번째 비트맵에는 존재하지만 두 번째 AggregateFunction(groupBitmap, T)에는 존재하지 않는 설정된 비트(set bits)가 포함된 비트맵을 반환합니다.

예시

사용 예시

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

bitmapAndnotCardinality

도입된 버전: v20.1.0

두 비트맵에 대한 AND-NOT 연산의 카디널리티를 반환합니다.

구문

bitmapAndnotCardinality(bitmap1, bitmap2)

인수

반환 값

bitmap1 AND-NOT bitmap2 연산 결과에서 1로 설정된 비트 수를 반환합니다. 반환 형식은 UInt64입니다.

예시

사용 예시

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

bitmapBuild

도입된 버전: v20.1.0

부호 없는 정수 배열에서 비트맵을 생성합니다. 함수 bitmapToArray의 역연산에 해당합니다.

구문

bitmapBuild(array)

인자

반환값

지정한 배열로부터 비트맵을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapCardinality

도입 버전: v20.1.0

비트맵에서 1로 설정된 비트 수(카디널리티)를 반환합니다.

구문

bitmapCardinality(bitmap)

인수

반환 값

비트맵에서 설정된 비트의 개수를 반환합니다. UInt64

예시

사용 예시

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

bitmapContains

도입된 버전: v20.1.0

비트맵에 특정 요소가 포함되어 있는지 여부를 확인합니다.

구문

bitmapContains(bitmap, value)

인수

반환 값

비트맵에 지정된 값이 포함되어 있으면 1, 그렇지 않으면 0을 반환합니다. UInt8

예시

사용 예시

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

bitmapHasAll

도입 버전: v20.1.0

첫 번째 비트맵이 두 번째 비트맵에서 1로 설정된 모든 비트를 포함하는지 확인합니다.

구문

bitmapHasAll(bitmap1, bitmap2)

인수

반환 값

두 번째 비트맵의 모든 설정된 비트가 첫 번째 비트맵에 존재하면 1을, 그렇지 않으면 0을 반환합니다. 반환 타입은 UInt8입니다.

예시

사용 예시

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

bitmapHasAny

도입된 버전: v20.1.0

첫 번째 비트맵에 두 번째 비트맵에서 1로 설정된 비트가 하나라도 포함되어 있는지 확인합니다.

구문

bitmapHasAny(bitmap1, bitmap2)

인수

반환값

두 번째 비트맵에 설정된 비트 중 하나라도 첫 번째 비트맵에 존재하면 1을, 그렇지 않으면 0을 반환합니다. UInt8

예시

사용 예시

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

bitmapMax

도입 버전: v20.1.0

비트맵에서 설정된 비트 중 가장 큰 비트(최상위 비트)의 위치를 반환하며, 비트맵이 비어 있으면 0을 반환합니다.

구문

bitmapMax(bitmap)

인수

반환 값

비트맵에서 설정된 비트 중 가장 큰 비트의 위치를 반환하며, 그러한 비트가 없으면 0을 반환합니다. UInt64

예시

사용 예시

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

bitmapMin

도입 버전: v20.1.0

비트맵에서 설정된(비트가 1인) 가장 작은 비트의 위치를 반환합니다. 모든 비트가 해제되어 있거나, 비트맵이 2^64개보다 많은 비트를 포함하는 경우에는 UINT32_MAX(비트 수가 2^64개를 초과하면 UINT64_MAX)를 반환합니다.

구문

bitmapMin(bitmap)

인자

반환 값

비트맵에서 1로 설정된 비트 중 가장 작은 비트의 위치를 반환하거나, 그렇지 않으면 UINT32_MAX/UINT64_MAX UInt64을(를) 반환합니다.

예시

사용 예시

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

bitmapOr

도입된 버전: v20.1.0

두 비트맵 간의 논리합(OR)을 계산합니다.

문법

bitmapOr(bitmap1, bitmap2)

인수

반환 값

두 입력 bitmap 중 하나 이상에서 1로 설정된 비트를 포함하는 bitmap을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapOrCardinality

도입 버전: v20.1.0

두 비트맵의 논리합(OR)의 카디널리티를 반환합니다.

구문

bitmapOrCardinality(bitmap1, bitmap2)

인수

반환 값

두 비트맵의 합집합에서 1로 설정된 비트 수를 반환합니다. UInt64

예시

사용 예시

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

bitmapSubsetInRange

도입 버전: v20.1.0

비트맵에서 지정된 범위 [start, end) 내의 1로 설정된 비트만 포함하는 부분 비트맵을 반환합니다. 인덱스는 1부터 시작합니다.

구문

bitmapSubsetInRange(bitmap, start, end)

인수

반환 값

지정된 범위에서 1로 설정된 비트만 포함하는 비트맵을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapSubsetLimit

도입 버전: v20.1.0

비트맵에서 위치 range_start부터 시작하여 설정된 비트(set bit)가 최대 cardinality_limit개까지 포함된 부분 비트맵을 반환합니다. 인덱스는 1부터 시작합니다.

문법

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

인수

반환 값

range_start부터 시작하여 최대 cardinality_limit개의 1로 설정된 비트를 포함하는 비트맵을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapToArray

도입 버전: v20.1.0

비트맵을 부호 없는 정수 배열로 변환합니다. 함수 bitmapBuild의 역연산입니다.

구문

bitmapToArray(bitmap)

인수

반환 값

비트맵에 포함된 부호 없는 정수로 이루어진 배열을 반환합니다. Array(UInt*)

예제

사용 예제

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

bitmapTransform

도입된 버전: v20.1.0

from_array의 특정 비트 값을 to_array의 해당 비트 값과 맞바꿔 비트맵에서 최대 N개의 비트를 변경합니다.

구문

bitmapTransform(bitmap, from_array, to_array)

인수

반환 값

지정된 매핑에 따라 요소가 변환된 bitmap을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapXor

도입 버전: v20.1.0

두 비트맵의 대칭 차집합(XOR)을 계산합니다.

구문

bitmapXor(bitmap1, bitmap2)

인수

반환 값

두 입력 비트맵 중 하나에만 존재하고 둘 모두에는 존재하지 않는 비트가 설정된 비트맵을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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

bitmapXorCardinality

도입된 버전: v20.1.0

두 비트맵에 대해 XOR(대칭 차집합) 연산을 수행한 결과의 기수(cardinality)를 반환합니다.

구문

bitmapXorCardinality(bitmap1, bitmap2)

인수

반환 값

두 비트맵의 대칭차집합에서 설정된 비트 개수를 반환합니다. UInt64

예시

사용 예시

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

subBitmap

도입된 버전: v21.9.0

비트맵에서 offset 위치부터 시작하는 부분 집합을 반환합니다. 반환되는 비트맵의 최대 카디널리티(cardinality)는 cardinality_limit입니다.

구문

subBitmap(bitmap, offset, cardinality_limit)

인수

  • bitmap — 비트맵 객체. AggregateFunction(groupBitmap, T). - offset — 처음부터(0 기준) 건너뛸 설정된 비트 수. UInt32 - cardinality_limit — 부분집합에 포함할 수 있는 설정된 비트의 최대 개수. UInt32

반환 값

오름차순으로 나열했을 때 앞에서 offset개의 설정된 비트를 건너뛴 후, 최대 limit개의 설정된 비트를 포함하는 비트맵을 반환합니다. AggregateFunction(groupBitmap, T)

예시

사용 예시

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