Перейти к основному содержимому
Версия: 2.0.x

BITMAP

BITMAP часто используется для ускорения подсчета уникальных значений (count distinct). Он похож на HyperLogLog (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.