mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-12 17:32:32 +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 │
|
|||
|
└─────┘
|
|||
|
```
|
|||
|
|