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

BINARY/VARBINARY

BINARY(M)

VARBINARY(M)

Начиная с версии 1.5.0, Selena поддерживает тип данных BINARY/VARBINARY, который используется для хранения двоичных данных. Максимальная поддерживаемая длина такая же, как у VARCHAR [1, 1048576]. Единица измерения: байты. Если M не указан, по умолчанию используется 1048576. Типы двоичных данных содержат байтовые строки, в то время как символьные типы данных содержат символьные строки.

BINARY является псевдонимом VARBINARY. Использование такое же, как у VARBINARY.

Ограничения и примечания по использованию

  • Столбцы VARBINARY поддерживаются в таблицах Duplicate Key, Primary Key и Unique Key. Они не поддерживаются в таблицах Aggregate.

  • Столбцы VARBINARY нельзя использовать в качестве ключей разделов, ключей группировки или столбцов измерений таблиц Duplicate Key, Primary Key и Unique Key. Их нельзя использовать в предложениях ORDER BY, GROUP BY и JOIN.

  • BINARY(M)/VARBINARY(M) не дополняются справа пробелами в случае несовпадающей длины.

Примеры

Создание столбца типа VARBINARY

При создании таблицы используйте ключевое слово VARBINARY для указания столбца j как столбца VARBINARY.

CREATE TABLE `test_binary` (
`id` INT(11) NOT NULL COMMENT "",
`j` VARBINARY NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`id`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`id`)
PROPERTIES (
"replication_num" = "3",
"storage_format" = "DEFAULT"
);

mysql> DESC test_binary;
+-------+-----------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-------+---------+-------+
| id | int | NO | true | NULL | |
| j | varbinary | YES | false | NULL | |
+-------+-----------+------+-------+---------+-------+
2 rows in set (0.01 sec)

Загрузка данных и сохранение их как тип BINARY

Selena поддерживает следующие способы загрузки данных и сохранения их как тип BINARY.

  • Способ 1: Используйте INSERT INTO для записи данных в константный столбец типа BINARY (например, столбец j), где константный столбец имеет префикс x''.

    INSERT INTO test_binary (id, j) VALUES (1, x'abab');
    INSERT INTO test_binary (id, j) VALUES (2, x'baba');
    INSERT INTO test_binary (id, j) VALUES (3, x'010102');
    INSERT INTO test_binary (id, j) VALUES (4, x'0000');
  • Способ 2: Используйте функцию to_binary для преобразования данных VARCHAR в двоичные данные.

    INSERT INTO test_binary select 5, to_binary('abab', 'hex');
    INSERT INTO test_binary select 6, to_binary('abab', 'base64');
    INSERT INTO test_binary select 7, to_binary('abab', 'utf8');
  • Способ 3: Используйте Broker Load для загрузки файла Parquet или ORC и сохранения файла как данные BINARY. Для получения дополнительной информации см. Broker Load.

    • Для файлов Parquet преобразуйте parquet::Type::type::BYTE_ARRAY в TYPE_VARBINARY напрямую.
    • Для файлов ORC преобразуйте orc::BINARY в TYPE_VARBINARY напрямую.
  • Способ 4: Используйте Stream Load для загрузки файла CSV и сохранения файла как данные BINARY. Для получения дополнительной информации см. Load CSV data.

    • CSV файл использует шестнадцатеричный формат для двоичных данных. Убедитесь, что входное двоичное значение является допустимым шестнадцатеричным значением.
    • Тип BINARY поддерживается только в файле CSV. Файл JSON не поддерживает тип BINARY.

    Например, t1 — это таблица со столбцом VARBINARY b.

    CREATE TABLE `t1` (
    `k` int(11) NOT NULL COMMENT "",
    `v` int(11) NOT NULL COMMENT "",
    `b` varbinary
    ) ENGINE = OLAP
    DUPLICATE KEY(`k`)
    PARTITION BY RANGE(`v`) (
    PARTITION p1 VALUES [("-2147483648"), ("0")),
    PARTITION p2 VALUES [("0"), ("10")),
    PARTITION p3 VALUES [("10"), ("20")))
    DISTRIBUTED BY HASH(`k`)
    PROPERTIES ("replication_num" = "1");

    -- csv file
    -- cat temp_data
    0,0,ab

    -- Load CSV file using Stream Load.
    curl --location-trusted -u <username>:<password> -T temp_data -XPUT -H column_separator:, -H label:xx http://172.17.0.1:8131/api/test_mv/t1/_stream_load

    -- Query the loaded data.
    mysql> select * from t1;
    +------+------+------------+
    | k | v | xx |
    +------+------+------------+
    | 0 | 0 | 0xAB |
    +------+------+------------+
    1 rows in set (0.11 sec)

Запрос и обработка данных BINARY

Selena поддерживает запрос и обработку данных BINARY, а также поддерживает использование функций и операторов BINARY. В этом примере используется таблица test_binary.

Примечание: Если вы добавите опцию --binary-as-hex при доступе к Selena из вашего MySQL клиента, двоичные данные будут отображаться в шестнадцатеричной записи.

mysql> select * from test_binary;
+------+------------+
| id | j |
+------+------------+
| 1 | 0xABAB |
| 2 | 0xBABA |
| 3 | 0x010102 |
| 4 | 0x0000 |
| 5 | 0xABAB |
| 6 | 0xABAB |
| 7 | 0x61626162 |
+------+------------+
7 rows in set (0.08 sec)

Пример 1: Просмотр двоичных данных с помощью функции hex.

mysql> select id, hex(j) from test_binary;
+------+----------+
| id | hex(j) |
+------+----------+
| 1 | ABAB |
| 2 | BABA |
| 3 | 010102 |
| 4 | 0000 |
| 5 | ABAB |
| 6 | ABAB |
| 7 | 61626162 |
+------+----------+
7 rows in set (0.02 sec)

Пример 2: Просмотр двоичных данных с помощью функции to_base64.

mysql> select id, to_base64(j) from test_binary;
+------+--------------+
| id | to_base64(j) |
+------+--------------+
| 1 | q6s= |
| 2 | uro= |
| 3 | AQEC |
| 4 | AAA= |
| 5 | q6s= |
| 6 | q6s= |
| 7 | YWJhYg== |
+------+--------------+
7 rows in set (0.01 sec)

Пример 3: Просмотр двоичных данных с помощью функции from_binary.

mysql> select id, from_binary(j, 'hex') from test_binary;
+------+-----------------------+
| id | from_binary(j, 'hex') |
+------+-----------------------+
| 1 | ABAB |
| 2 | BABA |
| 3 | 010102 |
| 4 | 0000 |
| 5 | ABAB |
| 6 | ABAB |
| 7 | 61626162 |
+------+-----------------------+
7 rows in set (0.01 sec)