ClickHouse/docs/zh/query_language/functions/bitmap_functions.md
Ivan Blinkov 2e1f6bc56d
[experimental] add "es" docs language as machine translated draft (#9787)
* replace exit with assert in test_single_page

* improve save_raw_single_page docs option

* More grammar fixes

* "Built from" link in new tab

* fix mistype

* Example of include in docs

* add anchor to meeting form

* Draft of translation helper

* WIP on translation helper

* Replace some fa docs content with machine translation

* add normalize-en-markdown.sh

* normalize some en markdown

* normalize some en markdown

* admonition support

* normalize

* normalize

* normalize

* support wide tables

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* normalize

* lightly edited machine translation of introdpection.md

* lightly edited machhine translation of lazy.md

* WIP on translation utils

* Normalize ru docs

* Normalize other languages

* some fixes

* WIP on normalize/translate tools

* add requirements.txt

* [experimental] add es docs language as machine translated draft

* remove duplicate script

* Back to wider tab-stop (narrow renders not so well)
2020-03-21 07:11:51 +03:00

385 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 位图函数 {#wei-tu-han-shu}
位图函数用于对两个位图对象进行计算对于任何一个位图函数它都将返回一个位图对象例如andorxornot等等。
位图对象有两种构造方法。一个是由聚合函数groupBitmapState构造的另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。
我们使用RoaringBitmap实际存储位图对象当基数小于或等于32时它使用Set保存。当基数大于32时它使用RoaringBitmap保存。这也是为什么低基数集的存储更快的原因。
有关RoaringBitmap的更多信息请参阅[CRoaring](https://github.com/RoaringBitmap/CRoaring)。
## bitmapBuild {#bitmapbuild}
从无符号整数数组构建位图对象。
bitmapBuild(array)
**参数**
- `array` 无符号整数数组.
**示例**
``` sql
SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res
```
## bitmapToArray {#bitmaptoarray}
将位图转换为整数数组。
bitmapToArray(bitmap)
**参数**
- `bitmap` 位图对象.
**示例**
``` sql
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res
```
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
## bitmapSubsetInRange {#bitmapsubsetinrange}
将位图指定范围不包含range\_end转换为另一个位图。
bitmapSubsetInRange(bitmap, range_start, range_end)
**参数**
- `bitmap` 位图对象.
- `range_start` 范围起始点(含).
- `range_end` 范围结束点(不含).
**示例**
``` 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
```
┌─res───────────────┐
│ [30,31,32,33,100] │
└───────────────────┘
## bitmapSubsetLimit {#bitmapsubsetlimit}
将位图指定范围(起始点和数目上限)转换为另一个位图。
bitmapSubsetLimit(bitmap, range_start, limit)
**参数**
- `bitmap` 位图对象.
- `range_start` 范围起始点(含).
- `limit` 子位图基数上限.
**示例**
``` 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
```
┌─res───────────────────────┐
│ [30,31,32,33,100,200,500] │
└───────────────────────────┘
## bitmapContains {#bitmapcontains}
检查位图是否包含指定元素。
bitmapContains(haystack, needle)
**参数**
- `haystack` 位图对象.
- `needle` 元素类型UInt32.
**示例**
``` sql
SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res
```
``` text
┌─res─┐
│ 1 │
└─────┘
```
## bitmapHasAny {#bitmaphasany}
与`hasAny(arrayarray)`类似如果位图有任何公共元素则返回1否则返回0。
对于空位图返回0。
bitmapHasAny(bitmap,bitmap)
**参数**
- `bitmap` bitmap对象。
**示例**
``` sql
SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
```
┌─res─┐
│ 1 │
└─────┘
## bitmapHasAll {#bitmaphasall}
与`hasAll(arrayarray)`类似如果第一个位图包含第二个位图的所有元素则返回1否则返回0。
如果第二个参数是空位图则返回1。
bitmapHasAll(bitmap,bitmap)
**参数**
- `bitmap` bitmap 对象。
**示例**
``` sql
SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res
```
┌─res─┐
│ 0 │
└─────┘
## bitmapAnd {#bitmapand}
为两个位图对象进行与操作,返回一个新的位图对象。
bitmapAnd(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
```
┌─res─┐
│ [3] │
└─────┘
## bitmapOr {#bitmapor}
为两个位图对象进行或操作,返回一个新的位图对象。
bitmapOr(bitmap1,bitmap2)
**Parameters**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
```
┌─res─────────┐
│ [1,2,3,4,5] │
└─────────────┘
## bitmapXor {#bitmapxor}
为两个位图对象进行异或操作,返回一个新的位图对象。
bitmapXor(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
```
┌─res───────┐
│ [1,2,4,5] │
└───────────┘
## bitmapAndnot {#bitmapandnot}
计算两个位图的差异,返回一个新的位图对象。
bitmapAndnot(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res
```
┌─res───┐
│ [1,2] │
└───────┘
## bitmapCardinality {#bitmapcardinality}
返回一个UInt64类型的数值表示位图对象的基数。
bitmapCardinality(bitmap)
**Parameters**
- `bitmap` 位图对象。
**示例**
``` sql
SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res
```
┌─res─┐
│ 5 │
└─────┘
## bitmapMin {#bitmapmin}
返回一个UInt64类型的数值表示位图中的最小值。如果位图为空则返回UINT32\_MAX。
bitmapMin(bitmap)
**Parameters**
- `bitmap` 位图对象。
**示例**
``` sql
SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res
```
┌─res─┐
│ 1 │
└─────┘
## bitmapMax {#bitmapmax}
返回一个UInt64类型的数值表示位图中的最大值。如果位图为空则返回0。
bitmapMax(bitmap)
**Parameters**
- `bitmap` 位图对象。
**示例**
``` sql
SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res
```
┌─res─┐
│ 5 │
└─────┘
## bitmapAndCardinality {#bitmapandcardinality}
为两个位图对象进行与操作,返回结果位图的基数。
bitmapAndCardinality(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
┌─res─┐
│ 1 │
└─────┘
## bitmapOrCardinality {#bitmaporcardinality}
为两个位图进行或运算,返回结果位图的基数。
bitmapOrCardinality(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
┌─res─┐
│ 5 │
└─────┘
## bitmapXorCardinality {#bitmapxorcardinality}
为两个位图进行异或运算,返回结果位图的基数。
bitmapXorCardinality(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` 位图对象。
**示例**
``` sql
SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
┌─res─┐
│ 4 │
└─────┘
## bitmapAndnotCardinality {#bitmapandnotcardinality}
计算两个位图的差异,返回结果位图的基数。
bitmapAndnotCardinality(bitmap1,bitmap2)
**参数**
- `bitmap1` 位图对象。
- `bitmap2` - 位图对象。
**示例**
``` sql
SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res;
```
┌─res─┐
│ 2 │
└─────┘
[来源文章](https://clickhouse.tech/docs/en/query_language/functions/bitmap_functions/) <!--hide-->