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

bitmap_to_binary

Описание

Преобразует значения Bitmap в двоичную строку.

bitmap_to_binary в основном используется для экспорта данных Bitmap. Эффект сжатия лучше, чем у bitmap_to_base64.

Если вы планируете экспортировать данные напрямую в двоичный файл, такой как Parquet, рекомендуется использовать эту функцию.

Эта функция поддерживается начиная с версии 1.5.0.

Синтаксис

VARBINARY bitmap_to_binary(BITMAP bitmap)

Параметры

bitmap: Bitmap для преобразования, обязательный параметр. Если входное значение недопустимо, возвращается ошибка.

Возвращаемое значение

Возвращает значение типа VARBINARY.

Примеры

Пример 1: Использование этой функции с другими bitmap функциями.

mysql> select hex(bitmap_to_binary(bitmap_from_string("0, 1, 2, 3")));
+---------------------------------------------------------+
| hex(bitmap_to_binary(bitmap_from_string('0, 1, 2, 3'))) |
+---------------------------------------------------------+
| 023A3000000100000000000300100000000000010002000300 |
+---------------------------------------------------------+
1 row in set (0.01 sec)

mysql> select hex(bitmap_to_binary(to_bitmap(1)));
+-------------------------------------+
| hex(bitmap_to_binary(to_bitmap(1))) |
+-------------------------------------+
| 0101000000 |
+-------------------------------------+
1 row in set (0.01 sec)

mysql> select hex(bitmap_to_binary(bitmap_empty()));
+---------------------------------------+
| hex(bitmap_to_binary(bitmap_empty())) |
+---------------------------------------+
| 00 |
+---------------------------------------+
1 row in set (0.01 sec)

Пример 2: Преобразование каждого значения в столбце BITMAP в двоичную строку.

  1. Создайте агрегатную таблицу page_uv, где AGGREGATE KEY — это (page_id, visit_date). Эта таблица содержит столбец BITMAP visit_users, значения которого должны быть агрегированы.

        CREATE TABLE `page_uv`
    (`page_id` INT NOT NULL,
    `visit_date` datetime NOT NULL,
    `visit_users` BITMAP BITMAP_UNION NOT NULL
    ) ENGINE=OLAP
    AGGREGATE KEY(`page_id`, `visit_date`)
    DISTRIBUTED BY HASH(`page_id`)
    PROPERTIES (
    "replication_num" = "3",
    "storage_format" = "DEFAULT"
    );
  2. Вставьте данные в эту таблицу.

      insert into page_uv values
    (1, '2020-06-23 01:30:30', to_bitmap(13)),
    (1, '2020-06-23 01:30:30', to_bitmap(23)),
    (1, '2020-06-23 01:30:30', to_bitmap(33)),
    (1, '2020-06-23 02:30:30', to_bitmap(13)),
    (2, '2020-06-23 01:30:30', to_bitmap(23));

    select * from page_uv order by page_id;
    +---------+---------------------+-------------+
    | page_id | visit_date | visit_users |
    +---------+---------------------+-------------+
    | 1 | 2020-06-23 01:30:30 | NULL |
    | 1 | 2020-06-23 02:30:30 | NULL |
    | 2 | 2020-06-23 01:30:30 | NULL |
    +---------+---------------------+-------------+
  3. Преобразуйте каждое значение в столбце visit_users в строку с двоичным кодированием.

       mysql> select page_id, hex(bitmap_to_binary(visit_users)) from page_uv;
    +---------+------------------------------------------------------------+
    | page_id | hex(bitmap_to_binary(visit_users)) |
    +---------+------------------------------------------------------------+
    | 1 | 0A030000000D0000000000000017000000000000002100000000000000 |
    | 1 | 010D000000 |
    | 2 | 0117000000 |
    +---------+------------------------------------------------------------+
    3 rows in set (0.01 sec)