JSONデータの操作
JSONは、CQLスクリプト・エディターのINSERT文とSELECT文でサポートされています。
JSONオブジェクトとして表現されているデータを含むテーブルでは、データのINSERTおよびSELECTを実行できます。オブジェクトのメンバーは、テーブル内のカラム名にマップされます。例を次に示します。
次のスキーマ:
CREATE TABLE IF NOT EXISTS social.users (id uuid PRIMARY KEY, name text);
およびこのデータが存在する場合:
INSERT INTO social.users JSON '{ "id" : "93031620-12ae-11e4-9191-0800200c9a66", "name" : "Gary Binary"}'; INSERT INTO social.users JSON '{ "id" : "f6071e72-48ec-4fcb-bf3e-379c8a696488", "name" : "Jo Quux"}'; SELECT JSON * FROM social.users;
JSON形式の結果を操作している場合、DevCenterでは結果を新しい[Results]ビューアに表示します。このビューアは、構文のハイライト表示とコードの折りたたみ(+/-符号を使用)をサポートしています。データをJSONとして直接[Results]パネルからコピーすることもできます。
[CQL Script]エディターでのJSONのサポート
[CQL Script]エディターは、JSON固有の文を編集する際に、以下をサポートしています。
- 新しいCQLのキーワードと機能
- コード・アシスト
- 構文のハイライト表示
- 検証
- クイック修正
[CQL Script]エディターは、toJson関数とfromJson関数もサポートしています。
toJson関数は、SELECT文のselection句内でのみ有効です。たとえば、次のようなスキーマとデータがあるとします。
CREATE TYPE complex.phone (alias text, number text); CREATE TYPE complex.address (street text, city text, zip_code int, phones list<FROZEN<phone>>); CREATE TABLE IF NOT EXISTS complex.users (id uuid PRIMARY KEY, name text, addresses map<text, FROZEN<address>>); INSERT INTO complex.users (id, name, addresses) VALUES (756716f7-2e54-4715-9f00-91dcbea6cf50, 'John Doe', { 'home': { street : '1021 West 4th St. #202', city : 'San Pedro', zip_code : 92330, phones : [ { alias : 'home', number : '213-555-1212' } ] } } ); INSERT INTO complex.users (id, name, addresses) VALUES (f6071e72-48ec-4fcb-bf3e-379c8a696488, 'Jane Quux', { 'home': { street : '2580 Arnold Dr.', city : 'San Fransisco', zip_code : 94110, phones : [ { alias : 'home', number : '415-555-8945' } ] } } ); INSERT INTO complex.users (id, name, addresses) VALUES (93031620-12ae-11e4-9191-0800200c9a66, 'Gary Binary', { 'home': { street : '123 Eddy St.', city : 'Petaluma', zip_code : 95566, phones : [ { alias : 'home', number : '707-555-2323' } ] } } );
addressesカラムをJSONデータとして取得します。
SELECT name, toJson(addresses) FROM complex.users;
[Results]タブ:
および、[Details]データ・ビューア:
fromJson関数は、INSERT文、UPDATE文、およびDELETE文の中で有効です。以下は、上記と同じスキーマを使用したINSERT文の例です。
INSERT INTO complex.users (id, name, addresses) VALUES (d7b9b58a-2edc-11e5-a151-feff819cdc9f, 'Berthold Boxcart', fromJson('{"home":{"street":"12 Ghort St.","city":"Graton","zip_code":95444,"phones":[{"alias":"mobile","number":"707-555-8452"}]}}'));