Перейти к основному содержимому

BITMAP

BITMAP часто используется для ускорения count distinct. Он похож на HyperLogLog (HLL), но более точен в подсчете distinct значений. BITMAP потребляет больше памяти и дисковых ресурсов. Он поддерживает только агрегацию данных типа INT. Если вы хотите применить bitmap к строковым данным, необходимо сопоставить данные с помощью словаря низкой кардинальности.

Эта тема содержит простой пример создания столбца BITMAP и использования bitmap-функций для агрегации данных в этом столбце. Подробные определения функций или дополнительные Bitmap-функции см. в разделе "Bitmap functions".

Создание таблицы

  • Создайте 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.