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

ByteHouse 企业版

复制全文
数据类型
BitEngine
复制全文
BitEngine

BitEngine 是一个高效 集合数据 处理模型,它是查询分析数据库ClickHouse的一部分。BitEngine 底层基于 MergeTree Family 存储引擎,并在此基础上引入了 BitMap64 类型,开发了系列相关运算函数。BitEngine 提供的 BitMap64类型适合表达具有特定关系的大量实体ID的集合,将集合的交并补运算转化为bitmap之间的交并补运算,从而达到远超普通查询的性能指标。已上线业务的测试表明,使用 BitEngine 相比普通和 Array 或者用户表方式,在查询速度上有 10-50 倍不等的提升。
同时,我们也可以通过 字典编码 提升用户输入bitmap的计算性能。字典编码是一种数据压缩手段,它是BitEngine的一个部分,用于将用户输入的ID按照数字顺序从低到高依次编码,解决了Bitmap 存储的元素过于稀疏,无法最大化体现自身优势的问题。
不使用字典编码,仍然可以使用 BitEngine 的函数和聚合函数。

注意

BitEngine 不支持 HaUniqueMergeTree 引擎,只支持默认的 HaMergeTree 或 MergeTree 引擎类型。

基本用法

下面以单机测试为例,介绍建表和数据导入的基本用法。

建表

BitEngine 提供了BitMap64数据类型,在建表时,我们将需要将人群包存储的数据类型设置为BitMap64,例如:

CREATE TABLE [db.]table_name (
p_date Date, 
slice_id UInt64, 
tag String, 
ids BitMap64
) ENGINE = MergeTree PARTITION BY p_date ORDER BY tag_id 
SETTINGS index_granularity = 128

BitEngine 字典编码过程由引擎自动完成,用户可以通过对 BitMap64类型添加 BitEngineEncode属性来开启字典编码。例如:

CREATE TABLE [db.]table_name (
tag String,
slice_id UInt64, 
p_date Date,
ids BitMap64 BitEngineEncode
)ENGINE = HaMergeTree('/clickhouse/xxxx/{shard}', '{replica}')
PARTITION BY p_date
ORDER BY tag
SETTINGS index_granularity = 128

如果是在 ByteHouse 控制台建表,需要点击自定义,然后手动输入 BitMap64BitMap64 BitEngineEncode类型。
Image

数据导入

BitEngine 主要的数据存储方式是 BitMap64,用户在进行数据导入的时候,可以直接使用类似 Array(UInt64) 类型的数据导入方式进行导入,例如:

INSERT INTO TABLE [db.]table_name values ('2020-01-01', 1, 'male', [1,2,3,4,5])

BitEngine 会自动将 Array 类型的数据存储为 BitMap64 类型,之后存储和计算的类型都是 BitMap64 类型。
文件导入方式支持使用 CSV、JSON 等格式,与Array类型支持的导入方式相同。

查询

BitEngine 支持 ClickHouse 所有的查询方式,可以使用 ClickHouse 原有的函数操作BitMap64类型,但是他们的效率可能不高,为此我们开发了一系列的函数用于高效操作BitMap64类型,详见BitEngine 函数
例如,我们可以通过 bitmapColumnHas(bitmap_column, integer) 函数,接收一列 BitMap64 类型的数据,并检查该列是否包含指定元素:

select bitmapColumnHas(ids, 1) from [db.]table_name

函数和操作接口

详情请参考: BitEngine 函数

最近更新时间:2024.12.16 16:16:56
这个页面对您有帮助吗?
有用
有用
无用
无用