jsonl 形式のデータをオブジェクトとして mysql に格納する方法のメモ。
以下の jsonl のデータを MySQL に格納します。
■登録データ
■MySQL のテーブル定義
MySQL に登録する際に id を primary key とし、x、y にはインデックスを張ります。
■MySQL へのデータ登録
上記の jsonl 形式のデータを /var/lib/mysql-files/test1.jsonl に保存し、MySQL に load します。
このとき、fields terminated by '\t' を指定することで jsonl のデータが分割されないようにします。
■登録内容の確認
■primary key の確認
以下の通り、id を指定した検索では PRIMARY KEY が利用されていることがわかります。
以下の jsonl のデータを MySQL に格納します。
■登録データ
{"id": "01", "x": 30, "y": 170} {"id": "02", "x": 20, "y": 180} {"id": "03", "x": 25, "y": 160} {"id": "04", "x": 40, "y": 175} {"id": "05", "x": 45, "y": 180}
■MySQL のテーブル定義
create table test1 ( obj json, id varchar(16) generated always as (json_unquote(obj->"$.id")) stored, x integer generated always as (json_unquote(obj->"$.x")) stored, y integer generated always as (json_unquote(obj->"$.y")) stored, primary key (id), index (x, y), index (y, x) );
MySQL に登録する際に id を primary key とし、x、y にはインデックスを張ります。
■MySQL へのデータ登録
上記の jsonl 形式のデータを /var/lib/mysql-files/test1.jsonl に保存し、MySQL に load します。
このとき、fields terminated by '\t' を指定することで jsonl のデータが分割されないようにします。
load data infile '/var/lib/mysql-files/test1.jsonl' ignore into table test1 fields terminated by '\t' (obj);
■登録内容の確認
select * from test1; obj id x y {"x": 30, "y": 170, "id": "01"} 01 30 170 {"x": 20, "y": 180, "id": "02"} 02 20 180 {"x": 25, "y": 160, "id": "03"} 03 25 160 {"x": 40, "y": 175, "id": "04"} 04 40 175 {"x": 45, "y": 180, "id": "05"} 05 45 180
■primary key の確認
以下の通り、id を指定した検索では PRIMARY KEY が利用されていることがわかります。
explain select id, x, y from test1 where id = '03'\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test1 partitions: NULL type: const possible_keys: PRIMARY key: PRIMARY key_len: 66 ref: const rows: 1 filtered: 100.00 Extra: NULL