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"}]}}'));