mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 02:41:59 +00:00
588 lines
12 KiB
Markdown
588 lines
12 KiB
Markdown
---
|
||
slug: /ja/sql-reference/functions/bitmap-functions
|
||
sidebar_position: 25
|
||
sidebar_label: Bitmap
|
||
---
|
||
|
||
# Bitmap関数
|
||
|
||
ビットマップは2つの方法で構築できます。1つ目は集計関数groupBitmapと`-State`を用いて構築する方法で、もう1つは配列オブジェクトからビットマップを構築する方法です。
|
||
|
||
## bitmapBuild
|
||
|
||
符号なし整数配列からビットマップを構築します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapBuild(array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – 符号なし整数配列。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res);
|
||
```
|
||
|
||
``` text
|
||
┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐
|
||
│ │ AggregateFunction(groupBitmap, UInt8) │
|
||
└─────┴──────────────────────────────────────────────┘
|
||
```
|
||
|
||
## bitmapToArray
|
||
|
||
ビットマップを整数配列に変換します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapToArray(bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────┐
|
||
│ [1,2,3,4,5] │
|
||
└─────────────┘
|
||
```
|
||
|
||
## bitmapSubsetInRange
|
||
|
||
値の範囲内のビットを持つビットマップのサブセットを返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapSubsetInRange(bitmap, range_start, range_end)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – [ビットマップオブジェクト](#bitmapbuild)。
|
||
- `range_start` – 範囲の開始点(含む)。[UInt32](../data-types/int-uint.md)。
|
||
- `range_end` – 範囲の終了点(排他的)。[UInt32](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────┐
|
||
│ [30,31,32,33,100] │
|
||
└───────────────────┘
|
||
```
|
||
|
||
## bitmapSubsetLimit
|
||
|
||
最小のビット値`range_start`を持ち、最大`cardinality_limit`個の要素を持つビットマップのサブセットを返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapSubsetLimit(bitmap, range_start, cardinality_limit)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – [ビットマップオブジェクト](#bitmapbuild)。
|
||
- `range_start` – 範囲の開始点(含む)。[UInt32](../data-types/int-uint.md)。
|
||
- `cardinality_limit` – サブセットの最大カーディナリティ。[UInt32](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────────────┐
|
||
│ [30,31,32,33,100,200,500] │
|
||
└───────────────────────────┘
|
||
```
|
||
|
||
## subBitmap
|
||
|
||
指定した位置`offset`から始まるビットマップのサブセットを返します。返されるビットマップの最大カーディナリティは`cardinality_limit`です。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
subBitmap(bitmap, offset, cardinality_limit)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップ。[ビットマップオブジェクト](#bitmapbuild)。
|
||
- `offset` – サブセットの最初の要素の位置。[UInt32](../data-types/int-uint.md)。
|
||
- `cardinality_limit` – サブセット内の要素の最大数。[UInt32](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(subBitmap(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(10), toUInt32(10))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────────────────┐
|
||
│ [10,11,12,13,14,15,16,17,18,19] │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
## bitmapContains
|
||
|
||
ビットマップに要素が含まれているか確認します。
|
||
|
||
``` sql
|
||
bitmapContains(bitmap, needle)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – [ビットマップオブジェクト](#bitmapbuild)。
|
||
- `needle` – 検索するビット値。[UInt32](../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- 0 — `bitmap`が`needle`を含まない場合。[UInt8](../data-types/int-uint.md)。
|
||
- 1 — `bitmap`が`needle`を含む場合。[UInt8](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 1 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapHasAny
|
||
|
||
2つのビットマップが交差しているか確認します。
|
||
|
||
`bitmap2`が正確に1つの要素を含む場合、[bitmapContains](#bitmapcontains)を使用することを検討してみてください。より効率的に動作します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapHasAny(bitmap1, bitmap2)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap1` – ビットマップオブジェクト1。
|
||
- `bitmap2` – ビットマップオブジェクト2。
|
||
|
||
**返される値**
|
||
|
||
- `1` - `bitmap1`と`bitmap2`が少なくとも1つの共有要素を持つ場合。
|
||
- `0` - それ以外の場合。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 1 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapHasAll
|
||
|
||
最初のビットマップが2番目のビットマップのすべての要素を含む場合は1を返し、そうでない場合は0を返します。 2番目のビットマップが空であれば、1を返します。
|
||
|
||
`hasAll(array, array)`も参照してください。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapHasAll(bitmap1, bitmap2)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap1` – ビットマップオブジェクト1。
|
||
- `bitmap2` – ビットマップオブジェクト2。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 0 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapCardinality
|
||
|
||
ビットマップのカーディナリティを返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapCardinality(bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 5 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapMin
|
||
|
||
ビットマップで設定されている最小のビットを算出し、ビットマップが空の場合はUINT32_MAXを返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
bitmapMin(bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 1 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapMax
|
||
|
||
ビットマップで設定されている最大のビットを算出し、ビットマップが空の場合は0を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
bitmapMax(bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 5 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapTransform
|
||
|
||
ビットマップ内のビットを最大N個置き換えます。置き換えられるビットの古い値と新しい値は、それぞれ`from_array[i]`と`to_array[i]`で指定されます。
|
||
|
||
`from_array`と`to_array`の配列の順序によって結果が異なります。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapTransform(bitmap, from_array, to_array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
- `from_array` – UInt32配列。範囲\[0, from_array.size())内のidxについて、ビットマップがfrom_array\[idx\]を含む場合、それをto_array\[idx\]で置き換えます。
|
||
- `to_array` – `from_array`と同じサイズのUInt32配列。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), cast([5,999,2] as Array(UInt32)), cast([2,888,20] as Array(UInt32)))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────────┐
|
||
│ [1,3,4,6,7,8,9,10,20] │
|
||
└───────────────────────┘
|
||
```
|
||
|
||
## bitmapAnd
|
||
|
||
2つのビットマップの論理積を計算します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapAnd(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ [3] │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapOr
|
||
|
||
2つのビットマップの論理和を計算します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapOr(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────┐
|
||
│ [1,2,3,4,5] │
|
||
└─────────────┘
|
||
```
|
||
|
||
## bitmapXor
|
||
|
||
2つのビットマップの排他的論理和を計算します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapXor(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────┐
|
||
│ [1,2,4,5] │
|
||
└───────────┘
|
||
```
|
||
|
||
## bitmapAndnot
|
||
|
||
2つのビットマップの論理積を計算して結果を否定します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapAndnot(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───┐
|
||
│ [1,2] │
|
||
└───────┘
|
||
```
|
||
|
||
## bitmapAndCardinality
|
||
|
||
2つのビットマップの論理積のカーディナリティを返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
bitmapAndCardinality(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 1 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapOrCardinality
|
||
|
||
2つのビットマップの論理和のカーディナリティを返します。
|
||
|
||
``` sql
|
||
bitmapOrCardinality(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 5 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapXorCardinality
|
||
|
||
2つのビットマップの排他的論理和のカーディナリティを返します。
|
||
|
||
``` sql
|
||
bitmapXorCardinality(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 4 │
|
||
└─────┘
|
||
```
|
||
|
||
## bitmapAndnotCardinality
|
||
|
||
2つのビットマップのAND-NOT操作のカーディナリティを返します。
|
||
|
||
``` sql
|
||
bitmapAndnotCardinality(bitmap,bitmap)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `bitmap` – ビットマップオブジェクト。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 2 │
|
||
└─────┘
|
||
```
|
||
|