メインコンテンツまでスキップ
メインコンテンツまでスキップ

ビットマップ関数

ビットマップは二つの方法で構築できます。最初の方法は、-State を使用した集約関数 groupBitmap によって構築され、二つ目の方法は Array オブジェクトからビットマップを構築することです。

bitmapAnd

Introduced in: v20.1

二つのビットマップの論理積 (AND) を計算します。

構文

bitmapAnd(bitmap1, bitmap2)

引数

返される値

両方の入力ビットマップに存在するビットを含むビットマップを返します AggregateFunction(groupBitmap, T)

使用例

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

bitmapAndCardinality

Introduced in: v20.1

二つのビットマップの論理積 (AND) の基数を返します。

構文

bitmapAndCardinality(bitmap1, bitmap2)

引数

返される値

二つのビットマップの交差部分におけるセットビットの数を返します UInt64

使用例

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

bitmapAndnot

Introduced in: v20.1

二つのビットマップの論理積を計算し、結果を否定します (AND-NOT)。

構文

bitmapAndnot(bitmap1, bitmap2)

引数

返される値

最初のビットマップには存在するが、二番目のビットマップには存在しないセットビットを含むビットマップを返します AggregateFunction(groupBitmap, T)

使用例

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

bitmapAndnotCardinality

Introduced in: v20.1

二つのビットマップの AND-NOT 操作の基数を返します。

構文

bitmapAndnotCardinality(bitmap1, bitmap2)

引数

返される値

bitmap1 AND-NOT bitmap2 の結果のセットビットの数を返します UInt64

使用例

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

bitmapBuild

Introduced in: v20.1

符号なし整数配列からビットマップを構築します。これは、bitmapToArray 関数の逆です。 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

Introduced in: v20.1

ビットマップ内のセットビットの数 (基数) を返します。

構文

bitmapCardinality(bitmap)

引数

返される値

ビットマップ内のセットビットの数を返します UInt64

使用例

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

bitmapContains

Introduced in: v20.1

ビットマップが特定の要素を含んでいるかをチェックします。

構文

bitmapContains(bitmap, value)

引数

返される値

ビットマップが指定された値を含む場合は 1 を、それ以外の場合は 0 を返します UInt8

使用例

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

bitmapHasAll

Introduced in: v20.1

最初のビットマップが二番目のビットマップのすべてのセットビットを含んでいるかをチェックします。

構文

bitmapHasAll(bitmap1, bitmap2)

引数

返される値

二番目のビットマップのすべてのセットビットが最初のビットマップに存在する場合は 1 を、それ以外の場合は 0 を返します UInt8

使用例

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

bitmapHasAny

Introduced in: v20.1

最初のビットマップが二番目のビットマップのいずれかのセットビットを含んでいるかをチェックします。

構文

bitmapHasAny(bitmap1, bitmap2)

引数

返される値

二番目のビットマップのいずれかのビットが最初のビットマップに存在する場合は 1 を、それ以外の場合は 0 を返します UInt8

使用例

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

bitmapMax

Introduced in: v20.1

ビットマップ内で最も大きいビットがセットされている位置を返します。ビットマップが空である場合は 0 を返します。

構文

bitmapMax(bitmap)

引数

返される値

ビットマップ内で最も大きいビットがセットされている位置を返します。それ以外の場合は 0 を返します UInt64

使用例

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

bitmapMin

Introduced in: v20.1

ビットマップ内で最も小さいビットがセットされている位置を返します。すべてのビットが unset の場合は UINT32_MAX (ビットマップが 2^64 ビットを超える場合は UINT64_MAX)を返します。

構文

bitmapMin(bitmap)

引数

返される値

ビットマップ内で最も小さいビットがセットされている位置を返します。それ以外の場合は UINT32_MAX/UINT64_MAX を返します UInt64

使用例

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

bitmapOr

Introduced in: v20.1

二つのビットマップの論理和 (OR) を計算します。

構文

bitmapOr(bitmap1, bitmap2)

引数

返される値

いずれかの入力ビットマップに存在するセットビットを含むビットマップを返します AggregateFunction(groupBitmap, T)

使用例

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

bitmapOrCardinality

Introduced in: v20.1

二つのビットマップの論理和 (OR) の基数を返します。

構文

bitmapOrCardinality(bitmap1, bitmap2)

引数

返される値

二つのビットマップの和におけるセットビットの数を返します UInt64

使用例

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

bitmapSubsetInRange

Introduced in: v20.1

指定された範囲 [start, end) に存在するセットビットのみを含むビットマップのサブセットを返します。1ベースのインデックスを使用します。

構文

bitmapSubsetInRange(bitmap, start, end)

引数

返される値

指定された範囲のセットビットのみを含むビットマップを返します AggregateFunction(groupBitmap, T)

使用例

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

bitmapSubsetLimit

Introduced in: v20.1

range_start からのビットマップのサブセットを返し、最大で cardinality_limit のセットビットを含みます。1ベースのインデックスを使用します。

構文

bitmapSubsetLimit(bitmap, range_start, cardinality_limit)

引数

返される値

最大 cardinality_limit のセットビットを含むビットマップを返します。range_start から開始します AggregateFunction(groupBitmap, T)

使用例

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

bitmapToArray

Introduced in: v20.1

ビットマップを符号なし整数の配列に変換します。これは、bitmapBuild 関数の逆です。 bitmapBuild

構文

bitmapToArray(bitmap)

引数

返される値

ビットマップに含まれる符号なし整数の配列を返します Array(UInt*)

使用例

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

bitmapTransform

Introduced in: v20.1

ビットマップ内の最大 N ビットを、from_array 中の特定のビット値を to_array の対応するものと交換することによって変更します。

構文

bitmapTransform(bitmap, from_array, to_array)

引数

  • bitmap — ビットマップオブジェクト。 AggregateFunction(groupBitmap, T)。 - from_array — 置き換えられる元のセットビットの配列。 Array(T)。 - to_array — 置き換えに使用する新しいセットビットの配列。 Array(T)

返される値

指定されたマッピングに従って変換された要素を持つビットマップを返します 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

Introduced in: v20.1

二つのビットマップの対称差 (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

Introduced in: v20.1

二つのビットマップの XOR (対称差) の基数を返します。

構文

bitmapXorCardinality(bitmap1, bitmap2)

引数

返される値

二つのビットマップの対称差におけるセットビットの数を返します UInt64

使用例

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

subBitmap

Introduced in: v21.9

ビットマップのサブセットを返し、位置 offset から開始します。返されるビットマップの最大基数は cardinality_limit です。

構文

subBitmap(bitmap, offset, cardinality_limit)

引数

  • bitmap — ビットマップオブジェクト。 AggregateFunction(groupBitmap, T)。 - offset — 最初からスキップするセットビットの数 (ゼロベース)。 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] │
└────────┘