Cassandra-cql-collections
Cassandra-CQLコレクション
CQLは、Collectionデータ型を使用する機能を提供します。 これらのコレクションタイプを使用すると、1つの変数に複数の値を保存できます。 この章では、Cassandraでコレクションを使用する方法について説明します。
List
リストは次の場合に使用されます
- 要素の順序が維持されること、および
- 値は複数回保存されます。
リスト内の要素のインデックスを使用して、リストデータ型の値を取得できます。
リスト付きのテーブルを作成する
以下に、名前とメールという2つの列を持つサンプルテーブルを作成する例を示します。 複数のメールを保存するために、リストを使用しています。
cqlsh:finddevguides> CREATE TABLE data(name text PRIMARY KEY, email list<text>);
リストへのデータの挿入
リスト内の要素にデータを挿入するときに、下に示すように、すべての値を角カッコ[]内にコンマで区切って入力します。
cqlsh:finddevguides> INSERT INTO data(name, email) VALUES ('ramu',
['[email protected]','[email protected]'])
リストを更新する
以下に示すのは、 data というテーブルのリストデータ型を更新する例です。 ここで、リストに別のメールを追加しています。
cqlsh:finddevguides> UPDATE data
... SET email = email +['[email protected]']
... where name = 'ramu';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
cqlsh:finddevguides> SELECT *FROM data;
name | email
------+--------------------------------------------------------------
ramu | ['[email protected]', '[email protected]', '[email protected]']
(1 rows)
SET
Setは、要素のグループを格納するために使用されるデータ型です。 セットの要素は、ソートされた順序で返されます。
セット付きのテーブルの作成
次の例では、nameとphoneという2つの列を持つサンプルテーブルを作成します。 複数の電話番号を保存するために、setを使用しています。
cqlsh:finddevguides> CREATE TABLE data2 (name text PRIMARY KEY, phone set<varint>);
セットへのデータの挿入
セット内の要素にデータを挿入するときに、以下に示すように、中括弧\ {}内にすべての値をコンマで区切って入力します。
cqlsh:finddevguides> INSERT INTO data2(name, phone)VALUES ('rahman', {9848022338,9848022339});
セットの更新
次のコードは、data2という名前のテーブルのセットを更新する方法を示しています。 ここでは、セットに別の電話番号を追加しています。
cqlsh:finddevguides> UPDATE data2
... SET phone = phone + {9848022330}
... where name = 'rahman';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
cqlsh:finddevguides> SELECT* FROM data2;
name | phone
--------+--------------------------------------
rahman | {9848022330, 9848022338, 9848022339}
(1 rows)
MAP
マップは、要素のキーと値のペアを格納するために使用されるデータ型です。
マップ付きのテーブルの作成
次の例は、名前と住所の2つの列を持つサンプルテーブルを作成する方法を示しています。 複数のアドレス値を保存するために、マップを使用しています。
cqlsh:finddevguides> CREATE TABLE data3 (name text PRIMARY KEY, address
map<timestamp, text>);
マップへのデータの挿入
マップの要素にデータを挿入するときに、以下に示すように、すべての key:value ペアを中括弧\ {}内にコンマで区切って入力します。
cqlsh:finddevguides> INSERT INTO data3 (name, address)
VALUES ('robin', {'home' : 'hyderabad' , 'office' : 'Delhi' } );
セットの更新
次のコードは、data3という名前のテーブルのマップデータタイプを更新する方法を示しています。 ここでは、キーオフィスの値を変更しています。つまり、robinという名前の人のオフィスの住所を変更しています。
cqlsh:finddevguides> UPDATE data3
... SET address = address+{'office':'mumbai'}
... WHERE name = 'robin';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
cqlsh:finddevguides> select * from data3;
name | address
-------+-------------------------------------------
robin | {'home': 'hyderabad', 'office': 'mumbai'}
(1 rows)