You need to enable JavaScript to run this app.
文档中心
ByteHouse 企业版

ByteHouse 企业版

复制全文
下载 pdf
常用函数
BitEngine 函数
复制全文
下载 pdf
BitEngine 函数

普通函数

函数接收一行记录或者一个BitMap64对象,返回一行结果。

序号

函数接口

参数说明

返回值

功能释义

1

arrayToBitmap([x1, …])
-> bitmap

UIntN类型的数组
N={8, 16, 32, 64}

BitMap64对象

通过一个数组构造一个bitmap对象

2

bitmapToArray(bitmap)
-> [x1,...]

一个BitMap64对象

UInt64数组

将一个bimap对象转换为数组格式

3

bitmapAnd(bitmap1, bitmap2)
-> bitmap

两个BitMap64对象

BitMap64对象

bitmap的运算

4

bitmapOr(bitmap1, bitmap2)
-> bitmap

两个BitMap64对象

BitMap64对象

bitmap的运算

5

bitmapXor(bitmap1, bitmap2)
-> bitmap

两个BitMap64对象

BitMap64对象

bitmap的异或运算

6

bitmapAndnot(bitmap1, bitmap2)
-> bitmap

两个BitMap64对象

BitMap64对象

bitmap的运算

7

bitmapCardinality(bitmap)
-> integer

一个BitMap64对象

UInt64数值

bitmap中元素的个数

8

bitmapMin(bitmap)
-> integer

一个BitMap64对象

UInt64数值

bitmap中最小的元素

9

bitmapMax(bitmap)
-> integer

一个BitMap64对象

UInt64数值

bitmap中最大的元素

10

bitmapAndCardinality
(bitmap1, bitmap2)
-> integer

两个BitMap64对象

UInt64数值

bitmap的运算之后的元素个数

11

bitmapOrCardinality
(bitmap1, bitmap2)
-> integer

两个BitMap64对象

UInt64数值

bitmap的运算之后的元素个数

12

bitmapXorCardinality
(bitmap1, bitmap2)
-> integer

两个BitMap64对象

UInt64数值

bitmap的异或运算之后的元素个数

13

bitmapAndnotCardinality
(bitmap1, bitmap2)
-> integer

两个BitMap64对象

UInt64数值

bitmap的运算之后的元素个数

14

bitmapContains(bitmap, integer)
-> bool

一个BitMap64对象
UIntN类型的数字,
N={8, 16, 32, 64}

UInt8枚举
1->true
0->false

检查bitmap中是否包含指定元素

15

bitmapHasAll
(bitmap, sub_bitmap)
-> bool

两个BitMap64对象

UInt8枚举
1->true
0->false

检查sub_bitmap是否是bitmap的子集
(相等也返回1)

16

bitmapHasAny
(bitmap1, bitmap2)
-> bool

两个BitMap64对象

UInt8枚举
1->true
0->false

检查两个bitmap是否存在交集

17

bitmapSubsetInRange
(bitmap, range_start, range_end)
-> bitmap

一个BitMap64对象,两个UIntN数字,标识取值范围
N={8, 16, 32, 64}

BitMap64对象

检查并返回bitmap中符合给定数值大小范围的值组成的bitmap。

18

bitmapSubsetLimit
(bitmap, index_start, cardinality_limit)
-> bitmap

一个BitMap64对象,两个UIntN数字,标识下标启示范围,和子集大小

BitMap64对象

检查并返回由bitmap中指定位置开始的指定数量的元素组成的bitmap

这些函数主要是对ClickHouse社区相关函数的兼容,详见:
https://clickhouse.tech/docs/en/sql-reference/functions/bitmap-functions/

聚合函数

函数接收多行记录,进行聚合操作,返回一行结果。

序号

函数接口

参数说明

返回值

功能释义

1

bitmapColumnAnd
(bitmap_column)
-> bitmap

BitMap64类型的一列数据

BitMap64对象

接收一个bimap列,该列所有bitmap做运算

2

bitmapColumnOr
(bitmap_column)
-> bitmap

BitMap64类型的一列数据

BitMap64对象

接收一个bimap列,该列所有bitmap做运算

3

bitmapColumnXor
(bitmap_column)
-> bitmap

BitMap64类型的一列数据

BitMap64对象

接收一个bimap列,该列所有bitmap做异或运算

4

bitmapColumnCardinality
(bitmap_column)
-> UInt64

BitMap64类型的一列数据

UInt64数值

接收一个bimap列,该列所有bitmap做运算,返回最终结果bitmap的元素个数

5

bitmapColumnHas
(bitmap_column, integer)
-> bool

BitMap64类型的一列数据
UIntN类型的数字,
N={8, 16, 32, 64}

UInt8枚举
1->true
0->false

接收一个bimap列,检查该列是否包含指定元素

带表达式的高阶聚合函数

这种函数有两个括号传递参数:

  • 第一个括号称为parameter,用于控制聚合函数的行为 (控制流)
  • 第二个括号称为argument,用于向聚合函数传递输入数据列 (数据流)

表达式中的算子为交并差。
交集: 1&2
并集:1|2,另一种 1,2
差集:1~2

序号

函数接口

参数说明

返回值

功能释义

1

bitmapCount
(expression [, is_bitmap_execute] )
(tag_idx, bitmap_column)
-> integer

expression是与或非表达式,is_bitmap_execute用于BITMAP_EXECUTE模型,没有默认为0
tag_idx是每行bitmap对应的标记,目前是Int,且为正数

UInt64数值

对于bitmap_column中的每一行,取其tag,并依据expression指定的计算方式进行bitmap运算,返回最终bitmap中元素个数
SELECT BitmapCount('1&2')(tag_idx, bitmap) FROM ( SELECT multiIf(tag = 'a', toInt32(1), tag = 'b', toInt32(2), toInt32(-1000)) AS tag_idx, bitmap FROM test.test_table WHERE 1 )

2

bitmapMultiCount
(expr1, expr2, ...)
(tag_idx, bitmap_column)
-> [int1, int2, ...]

expression是与或非表达式
tag_idx是每行bitmap对应的标记,目前是Int,且为正数

UInt64数组

对于bitmap_column中的每一行,取其tag,并依据每个expr指定的计算方式进行多组bitmap运算,返回每组expr计算的结果bitmap中元素个数
SELECT bitmapMultiCount('1&2', '(1&2)
**'_1

3

bitmapMultiCountWithDate
(expr1, expr2, ...)
(date, tag_idx, bitmap_column)
-> [int1, int2, ...]

expression是与或非表达式
tag_idx是每行bitmap对应的标记,目前是Int,且为正数
date是整型表示(yyyyMMdd)的日期

UInt64数据

再bitmapMultiCount的基础上,可以分辨出不同的日期。
select bitmapMultiCountWithDate('20220101_1')(date, tag_idx, bitmap) from (select cast(toYYYYMMDD(p_date) as Int64) as date1, If(tag='a', toInt64(1),toInt64(0)) as tag_idx, bitmap from test.test_table
Tips: 注意date1和表中字段p_date不一样,否则会因为别名引发异常

4

bitmapExtract
(expression [, is_bitmap_execute] )
(tag_idx, bitmap_column)
-> bitmap

expression是与或非表达式
tag_idx是每行bitmap对应的标记,目前是Int,,且为正数

BitMap64对象

对于bitmap_column中的每一行,取其tag,并依据expression指定的计算方式进行bitmap运算,返回最终计算结果的bitmap
SELECT BitmapExtract('1&2')(tag_idx, bitmap) FROM ( SELECT multiIf(tag = 'a', toInt32(1), tag = 'b', toInt32(2), toInt32(-1000)) AS tag_idx, bitmap FROM test.test_table WHERE 1 )

tag_idx一般是用户指定,通常用非负整数比较好,如toInt32(1) as tag_idx。负数的话,请使用较小负数(如-100),防止对计算结果产生不必要的干扰(内部实现相关)。如果存在相同tag_idx的多行数据,聚合函数会自动把多行bitmap通过OR运算合并为一个,参与计算。最终计算时,一个tag_idx对应一个bitmap。

其他函数与操作接口

BitEngine状态查询

select * from system.bitengine where xxxxx
最近更新时间:2024.11.11 17:54:02
这个页面对您有帮助吗?
有用
有用
无用
无用