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に変換します。 
 - Parquetファイルの場合、 
 - 
方法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)