> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Bitmap 関数のドキュメント

# Bitmap Functions

bitmap は 2 つの方法で構築できます。1 つ目は、集約関数 groupBitmap に `-State` を付けて構築する方法です。もう 1 つは、Array オブジェクトから bitmap を構築する方法です。

{/*AUTOGENERATED_START*/}

<div id="bitmapAnd">
  ## bitmapAnd
</div>

導入バージョン: v20.1.0

2 つの bitmap の論理積 (AND) を計算します。

**構文**

```sql theme={null}
bitmapAnd(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 最初のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

両方の入力ビットマップに共通して存在するビットを含むビットマップを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res─┐
│ [3] │
└─────┘
```

<div id="bitmapAndCardinality">
  ## bitmapAndCardinality
</div>

導入バージョン: v20.1.0

2 つの bitmap の論理積 (AND) のカーディナリティを返します。

**構文**

```sql theme={null}
bitmapAndCardinality(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `bitmap2` — 2 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction).

**戻り値**

2 つのビットマップの積集合に含まれる、セットされたビットの数を返します [`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   1 │
└─────┘
```

<div id="bitmapAndnot">
  ## bitmapAndnot
</div>

導入バージョン: v20.1.0

2つのビットマップの集合差 A AND-NOT B を計算します。

**構文**

```sql theme={null}
bitmapAndnot(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

1 番目のビットマップにはあり、2 番目のビットマップにはない set bits を含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [1, 2] │
└────────┘
```

<div id="bitmapAndnotCardinality">
  ## bitmapAndnotCardinality
</div>

導入バージョン: v20.1.0

2 つの bitmap に対する AND-NOT (差) 演算のカーディナリティを返します。

**構文**

```sql theme={null}
bitmapAndnotCardinality(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `bitmap2` — 2つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction).

**戻り値**

`bitmap1 AND-NOT bitmap2` の結果における、セットされているビット数を返します。[`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   2 │
└─────┘
```

<div id="bitmapBuild">
  ## bitmapBuild
</div>

導入バージョン: v20.1.0

符号なし整数配列から bitmap を生成します。これは関数 [`bitmapToArray`](/ja/reference/functions/regular-functions/bitmap-functions#bitmapToArray) とは逆の処理です。

**構文**

```sql theme={null}
bitmapBuild(array)
```

**引数**

* `array` — 符号なし整数の配列。[`Array(UInt*)`](/ja/reference/data-types/array)

**戻り値**

指定された配列から生成されたbitmapを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
```

```response title=Response theme={null}
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
│     │ AggregateFunction(groupBitmap, UInt8)        │
└─────┴──────────────────────────────────────────────┘
```

<div id="bitmapCardinality">
  ## bitmapCardinality
</div>

導入バージョン: v20.1.0

bitmap 内でセットされているビット数 (カーディナリティ) を返します。

**構文**

```sql theme={null}
bitmapCardinality(bitmap)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

ビットマップ内でセットされているビットの数を返します。 [`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res
```

```response title=Response theme={null}
┌─res─┐
│   4 │
└─────┘
```

<div id="bitmapContains">
  ## bitmapContains
</div>

導入バージョン: v20.1.0

bitmap に特定の要素が含まれているかどうかを判定します。

**構文**

```sql theme={null}
bitmapContains(bitmap, value)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `value` — 確認対象の要素。[(U)Int8/16/32/64](/ja/reference/data-types/int-uint)

**戻り値**

ビットマップに指定された値が含まれている場合は `1`、それ以外は `0` を返します [`UInt8`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapHasAll">
  ## bitmapHasAll
</div>

導入バージョン: v20.1.0

1番目のbitmapに、2番目のbitmapで1に設定されているすべてのビットが含まれているかどうかを確認します。

**構文**

```sql theme={null}
bitmapHasAll(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `bitmap2` — 2 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

2 つ目のビットマップでセットされているすべてのビットが 1 つ目のビットマップに含まれている場合は `1`、そうでない場合は `0` を返します [`UInt8`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapHasAny">
  ## bitmapHasAny
</div>

導入バージョン: v20.1.0

1つ目のbitmapに、2つ目のbitmapでセットされているビットが1つでも含まれているかどうかを確認します。

**構文**

```sql theme={null}
bitmapHasAny(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction).

**戻り値**

2 番目のビットマップのいずれかのビットが 1 番目のビットマップに含まれている場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│  1  │
└─────┘
```

<div id="bitmapMax">
  ## bitmapMax
</div>

導入バージョン: v20.1.0

bitmap 内でセットされている最大のビット位置を返します。bitmap が空の場合は `0` を返します。

**構文**

```sql theme={null}
bitmapMax(bitmap)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

ビットマップで設定されている最上位ビットの位置を返します。ビットが設定されていない場合は `0` を返します。[`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   5 │
└─────┘
```

<div id="bitmapMin">
  ## bitmapMin
</div>

導入バージョン: v20.1.0

bitmap 内でセットされている最小のビット位置を返します。すべてのビットが未設定の場合は `UINT32_MAX` を返します (bitmap に `2^64` を超えるビットが含まれる場合は `UINT64_MAX`) 。

**構文**

```sql theme={null}
bitmapMin(bitmap)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

ビットマップでセットされている最小のビットの位置、または `UINT32_MAX`/`UINT64_MAX` [`UInt64`](/ja/reference/data-types/int-uint) を返します。

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   2 │
└─────┘
```

<div id="bitmapOr">
  ## bitmapOr
</div>

導入バージョン: v20.1.0

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

**構文**

```sql theme={null}
bitmapOr(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `bitmap2` — 2 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

いずれかの入力ビットマップに含まれる、1 に設定されたビットを持つビットマップを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘
```

<div id="bitmapOrCardinality">
  ## bitmapOrCardinality
</div>

導入バージョン: v20.1.0

2 つのビットマップの論理和 (OR) のカーディナリティを返します。

**構文**

```sql theme={null}
bitmapOrCardinality(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 最初のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `bitmap2` — 2番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

2 つのビットマップのユニオンにおけるセットビット数を返します。[`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   5 │
└─────┘
```

<div id="bitmapSubsetInRange">
  ## bitmapSubsetInRange
</div>

導入バージョン: v20.1.0

指定した範囲 \[start, end) 内の set bits のみを含む bitmap の部分集合を返します。インデックスは 1 から始まります。

**構文**

```sql theme={null}
bitmapSubsetInRange(bitmap, start, end)
```

**引数**

* `bitmap` — subset を抽出する対象のビットマップ。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `start` — 範囲の開始 (含む) 。[`UInt*`](/ja/reference/data-types/int-uint) - `end` — 範囲の終了 (含まない) 。[`UInt*`](/ja/reference/data-types/int-uint)

**戻り値**

指定した範囲内でセットされているビットのみを含むビットマップを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res;
```

```response title=Response theme={null}
┌─res───────┐
│ [2, 3, 4] │
└───────────┘
```

<div id="bitmapSubsetLimit">
  ## bitmapSubsetLimit
</div>

導入バージョン: v20.1.0

位置 `range_start` から始まる bitmap の subset を返します。含まれる set bits の数は最大 `cardinality_limit` 個です。インデックスは 1 始まりです。

**構文**

```sql theme={null}
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。 - `range_start` — 範囲の開始位置 (この値を含む) 。[`UInt32`](/ja/reference/data-types/int-uint) - `cardinality_limit` — 部分集合の最大カーディナリティ。[`UInt32`](/ja/reference/data-types/int-uint)

**戻り値**

`range_start` から始まる、セットされたビットを最大 `cardinality_limit` 個まで含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [5, 3] │
└────────┘
```

<div id="bitmapToArray">
  ## bitmapToArray
</div>

導入バージョン: v20.1.0

bitmap を符号なし整数の配列に変換します。関数 [`bitmapBuild`](/ja/reference/functions/regular-functions/bitmap-functions#bitmapBuild) の逆の操作です。

**構文**

```sql theme={null}
bitmapToArray(bitmap)
```

**引数**

* `bitmap` — 変換対象の bitmap。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)。

**戻り値**

bitmap に含まれる符号なし整数の配列を返します。[`Array(UInt*)`](/ja/reference/data-types/array)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
```

```response title=Response theme={null}
┌─res─────────────┐
│ [1, 2, 3, 4, 5] │
└─────────────────┘
```

<div id="bitmapTransform">
  ## bitmapTransform
</div>

導入バージョン: v20.1.0

`from_array` 内の特定のビット値を `to_array` 内の対応する値に置き換えることで、bitmap 内の最大 N ビットを変更します。

**構文**

```sql theme={null}
bitmapTransform(bitmap, from_array, to_array)
```

**引数**

* `bitmap` — ビットマップオブジェクト。 [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `from_array` — 置き換える元の set bits の Array。 [`Array(T)`](/ja/reference/data-types/array). - `to_array` — 置き換え先の新しい set bits の Array。 [`Array(T)`](/ja/reference/data-types/array).

**戻り値**

指定されたマッピングに従って要素が変換されたビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res;
```

```response title=Response theme={null}
┌─res───────────────┐
│ [1, 3, 5, 20, 40] │
└───────────────────┘
```

<div id="bitmapXor">
  ## bitmapXor
</div>

導入バージョン: v20.1.0

2 つの bitmap の対称差 (XOR) を返します。

**構文**

```sql theme={null}
bitmapXor(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 つ目のビットマップオブジェクト。 [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `bitmap2` — 2 つ目のビットマップオブジェクト。 [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction).

**戻り値**

どちらか一方の入力ビットマップにのみ存在するセットビットを含むビットマップを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res;
```

```response title=Response theme={null}
┌─res──────────┐
│ [1, 2, 4, 5] │
└──────────────┘
```

<div id="bitmapXorCardinality">
  ## bitmapXorCardinality
</div>

導入バージョン: v20.1.0

2 つの bitmap の XOR (対称差) のカーディナリティを返します。

**構文**

```sql theme={null}
bitmapXorCardinality(bitmap1, bitmap2)
```

**引数**

* `bitmap1` — 1 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `bitmap2` — 2 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction).

**戻り値**

2 つのビットマップの対称差における、セットされたビットの数を返します。[`UInt64`](/ja/reference/data-types/int-uint)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res;
```

```response title=Response theme={null}
┌─res─┐
│   4 │
└─────┘
```

<div id="subBitmap">
  ## subBitmap
</div>

導入バージョン: v21.9.0

`offset` の位置から始まるビットマップのサブセットを返します。返されるビットマップの最大カーディナリティは `cardinality_limit` です。

**構文**

```sql theme={null}
subBitmap(bitmap, offset, cardinality_limit)
```

**引数**

* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction). - `offset` — 先頭からスキップするセットされているビット数 (0ベース) 。[`UInt32`](/ja/reference/data-types/int-uint) - `cardinality_limit` — subset に含めるセットされているビットの最大数。[`UInt32`](/ja/reference/data-types/int-uint)

**戻り値**

昇順で `offset` 個のセットされているビットをスキップした後から、最大 `limit` 個のセットされているビットを含むビットマップを返します [`AggregateFunction(groupBitmap, T)`](/ja/reference/data-types/aggregatefunction)

**例**

**使用例**

```sql title=Query theme={null}
SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res;
```

```response title=Response theme={null}
┌─res────┐
│ [3, 4] │
└────────┘
```
