メインコンテンツまでスキップ

BINARY

BINARY/VARBINARY

説明

BINARY(M)

VARBINARY(M)

v3.0以降、StarRocksはバイナリデータを保存するために使用される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タイプとして格納する

StarRocksは、以下の方法でデータをロードして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を参照してください。例えば、 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)
    • CSVファイルではバイナリデータには16進数形式が使用されます。入力バイナリ値が有効な16進数値であることを確認してください。
    • BINARY タイプはCSVファイルでのみサポートされます。JSONファイルでは BINARY タイプはサポートされません。

BINARYデータのクエリと処理

StarRocksはBINARYデータのクエリと処理をサポートし、BINARY関数や演算子の使用もサポートします。この例ではテーブル test_binary を使用します。

注意:MySQLクライアントからStarRocksにアクセスする際に --binary-as-hex オプションを追加すると、バイナリデータは16進数表記で表示されます。

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)