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.