You need to enable JavaScript to run this app.
导航

BitEngine 函数

最近更新时间2023.11.23 20:15:43

首次发布时间2022.12.15 10:08:27

普通函数

函数接收一行记录或者一个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 )

5

bitmapJoinAndCard
(join_num, thread_num)
(bitmap_column, position_column
, joinkey_column, attribute_value_column, args...)

图片
可以参看详细文档

UInt64数值

这个函数非常复杂,主要对特定join条件下的bitmap做交运算,并携带一些额外数据返回。略微复杂,可以参考设计文档:
ClickHouse聚合函数BitMapJoinAndCard系列 使用说明

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

其他函数与操作接口

BitEngine状态查询

select * from system.bitengine where xxxxx