JSON
更新时间:2025-05-29
JSON
数据类型,用二进制格式高效存储 JSON 数据,通过 JSON 函数访问其内部字段。
默认支持 1048576 字节(1 MB),可调大到 2147483643 字节(2 GB),可通过 BE 配置string_type_length_soft_limit_bytes
调整。
与普通 String 类型存储的 JSON 字符串相比,JSON 类型有两点优势
- 数据写入时进行 JSON 格式校验
- 二进制存储格式更加高效,通过 json_extract 等函数可以高效访问 JSON 内部字段,比 get_json_xx 函数快几倍
注意: 在 1.2.x 版本中,JSON 类型的名字是 JSONB,为了尽量跟 MySQL 兼容,从 2.0.0 版本开始改名为 JSON,老的表仍然可以使用。
CSV 格式导入
第 1 步:准备数据
创建如下的 csv 文件:test_json.csv
其中分隔符使用 |
而不是逗号,以便和 json 中的逗号区分。
Plain Text
11|{"name": "tom", "age": 35}
22|{"name": null, "age": 28}
33|{"name": "micheal", "age": null}
44|{"name": null, "age": null}
55|null
第 2 步:在数据库中建表
SQL
1CREATE TABLE json_test (
2 id INT NOT NULL,
3 c_json JSON NULL
4)
5DUPLICATE KEY(id)
6DISTRIBUTED BY HASH(id) BUCKETS 1
7PROPERTIES (
8 "replication_allocation" = "tag.location.default: 1"
9);
第 3 步:导入数据
Bash
1curl --location-trusted \
2 -u "root":"" \
3 -H "column_separator:|" \
4 -H "columns: id, c_json" \
5 -T "test_json.csv" \
6 http://localhost:8040/api/testdb/json_test/_stream_load
第 4 步:检查导入数据
SQL
1SELECT * FROM json_test;
2+------+-------------------------------+
3| id | c_json |
4+------+-------------------------------+
5| 1 | {"name":"tom","age":35} |
6| 2 | {"name":null,"age":28} |
7| 3 | {"name":"micheal","age":null} |
8| 4 | {"name":null,"age":null} |
9| 5 | null |
10+------+-------------------------------+
115 rows in set (0.01 sec)
JSON 格式导入
第 1 步:准备数据
创建如下的 JSON 文件,test_json.json
JSON
1[
2 {"id": 1, "c_json": {"name": "tom", "age": 35}},
3 {"id": 2, "c_json": {"name": null, "age": 28}},
4 {"id": 3, "c_json": {"name": "micheal", "age": null}},
5 {"id": 4, "c_json": {"name": null, "age": null}},
6 {"id": 5, "c_json": null}
7]
第 2 步:在数据库中建表
SQL
1CREATE TABLE json_test (
2 id INT NOT NULL,
3 c_json JSON NULL
4)
5DUPLICATE KEY(id)
6DISTRIBUTED BY HASH(id) BUCKETS 1
7PROPERTIES (
8 "replication_allocation" = "tag.location.default: 1"
9);
第 3 步:导入数据
Bash
1curl --location-trusted \
2 -u "root":"" \
3 -H "format:json" \
4 -H "columns: id, c_json" \
5 -H "strip_outer_array:true" \
6 -T "test_json.json" \
7 http://localhost:8040/api/testdb/json_test/_stream_load
第 4 步:检查导入数据
SQL
1mysql> SELECT * FROM json_test;
2+------+-------------------------------+
3| id | c_json |
4+------+-------------------------------+
5| 1 | {"name":"tom","age":35} |
6| 2 | {"name":null,"age":28} |
7| 3 | {"name":"micheal","age":null} |
8| 4 | {"name":null,"age":null} |
9| 5 | NULL |
10+------+-------------------------------+
115 rows in set (0.01 sec)