CQLを使って、CassandraをSQLライクに操作する。

分散データベースApache CassandraをMac OS Xにインストール」に続いて、Cassandraの実際の使い方を紹介していきます。

CQLでCassandraを操作する

CQLシェルをインストールしたので、さっそくCQLでCassandraのデータを操作してみたいと思います。
CQLは、Cassandra Query Languageの略で、Cassandra版のSQLです。
スクリーンショット 2014-04-05 12.39.45
Cassandra Query Language (CQL) v3.1.5
CQLは、SQLとほぼ同じ構文となっているので、リレーショナルデータベースの経験がある人なら、誰でもすぐに理解できます。

キースペースを作成する。

まずは、キースペースを作成します。
キースペースは、MySQLでいうところのデータベースです。
CREATE KEYSPACE | DataStax CQL 3.0 Documentation
今回は、first_keyspaceという名前でキースペースを作成しました。

create keyspace first_keyspace with replication = {'class':'SimpleStrategy', 'replication_factor':1};

with replicationにレプリケーションに関する設定を記述します。
classに指定しているSimpleStrategyというのは、レプリケーションの方法です。Cassandraは仮想的に、分散ノードをリング上に並べるのですが、SimpleStrategyでは、リング上の隣のノードに対してレプリケーションをおこないます。
replication_factorに指定している1というのは、レプリケーションの冗長度です。2を指定すると、2つのノードに冗長化されます。今回は1台のノードで試しているので、replication_factorは1にします。つまり自身だけにレプリケーションをしている状態で、冗長化されていない状態です。

カラムファミリを作成する。

続いて、カラムファミリを作成します。
カラムファミリは、MySQLでいうところのテーブルになります。
CREATE TABLE | DataStax Cassandra 3.0 Documentation
その前に、先ほど作成したキースペースを選択しておきます。

use first_keyspace;

use文でカラムファミリを選択するのは、MySQLのuse文でデータベースを選択するのと同じです。
キースペースを選択したら、カラムファミリの作成に移ります。今回はfirst_tableという名前で、nameとvalueというカラムだけのカラムファミリを作成しました。

create table first_table (
name text PRIMARY KEY,
value text
);

この段階で、SQLと同様にselect文を実行してみます。

cqlsh:first_keyspace> select * from first_table;
(0 rows)

まだデータは入っていませんが、無事に実行できました。

データを追加する。

続いて、Cassandraにデータを保存してみます。
INSERT | DataStax CQL 3.0 Documentation
ここはSQLと完全に一致だったので、説明不要です。

insert into first_table (name, value) values ('hoge', 'fuga');
insert into first_table (name, value) values ('piyo', 'hage');

データを追加したら、select文で、データの確認ができます。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+-------
 piyo |  hage
 hoge |  fuga
(2 rows)

確かに挿入されています!

データを削除する。

続いてデータを削除してみます。
DELETE | DataStax CQL 3.0 Documentation
もう勝手が分かってきたので、「deleteは、こんなもんだろう!」と打ち込んでみました。

cqlsh:first_keyspace> delete from first_table;
Bad Request: line 1:23 mismatched input ';' expecting K_WHERE

残念ながら、エラーでした。where句は必須のようです。

cqlsh:first_keyspace> delete from first_table where value = 'fuga';
Bad Request: Non PRIMARY KEY value found in where clause

where句への指定がプライマリキーでない場合もエラーとなります。

delete from first_table where name = 'hoge';

where句にプライマリキーであるnameの条件を指定すると、無事に削除ができました。select文で確認してみると、確かにデータが削除されています。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+-------
 piyo |  hage
(1 rows)

CassandraがKVSの派生であることを考えると、プライマリキーの指定が必須であるのも納得はできます。

データを更新する。

データの更新もしてみます。
UPDATE | DataStax CQL 3.0 Documentation
この場合も、削除と同様にwhere句にプライマリキーの指定が必須ですが、SQLとほぼ同様に更新ができます。

update first_table set value = 'hogera' where name = 'piyo';

update文を実行したら、select文で結果を確認してみます。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+--------
 piyo | hogera
(1 rows)

確かに更新ができています。

SQLに使い慣れた人ならCQLは簡単

というわけで、CQLは意外と簡単でした!
SQLとCQLの違いは、データベースの構造に由来するものなので、MySQLとCassandraのデータの持ち方を想像してみると理解しやすいかもしれません。
次は、Cassandraをプログラムから使うにはどうしたら良いのか、という話題に踏み込んでいきます。→「phpcassaで、PHPからCassandraを操作する。

コメント

  1. […] 実際の使い方に続きます。→「Cassandraを操作するCQLの基本を試してみる。」 […]

  2. […] 「CQLを使って、CassandraをSQLライクに操作する。」に続いて、Cassandraをプログラムから操作してみます。 […]

  3. […] 分散データベースApache CassandraをMac OS Xにインストール CQLを使って、CassandraをSQLライクに操作する。 […]

タイトルとURLをコピーしました