跳到主要内容
版本: 最新版本-3.5

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