BITMAP
BITMAP 通常用于加速 count distinct 计算。它类似于 HyperLogLog (HLL),但在 count distinct 计算中比 HLL 更准确。 BITMAP 消耗更多的内存和磁盘资源。它仅支持 INT 数据的聚合。 如果你想将 bitmap 应用于字符串数据,必须使用低基数字典映射数据。
本主题提供了一个简单的示例,说明如何创建 BITMAP 列并使用 bitmap 函数来聚合该列的数据。 有关详细的函数定义或更多 Bitmap 函数,请参阅“Bitmap 函数”。
创建表
-
创建一个 Aggregate 表,其中
user_id
列的数据类型为 BITMAP,并使用 bitmap_union() 函数来聚合数据。CREATE TABLE `pv_bitmap` (
`dt` int(11) NULL COMMENT "",
`page` varchar(10) NULL COMMENT "",
`user_id` bitmap BITMAP_UNION NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`dt`, `page`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`dt`); -
创建一个 Primary Key 表,其中
userid
列的数据类型为 BITMAP。CREATE TABLE primary_bitmap (
`tagname` varchar(65533) NOT NULL COMMENT "Tag name",
`tagvalue` varchar(65533) NOT NULL COMMENT "Tag value",
`userid` bitmap NOT NULL COMMENT "User ID")
ENGINE=OLAP
PRIMARY KEY(`tagname`, `tagvalue`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`tagname`);
在将数据插入 BITMAP 列之前,必须首先使用 to_bitmap() 函数转换数据。
有关如何使用 BITMAP 的详细信息,例如将 BITMAP 数据加载到表中,请参阅bitmap。