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)