cassandra CLI(command line client)は、Apache Cassandraにアクセスする対話型ツール。
(OracleのSQL*Plus、JavaDBのij、HBaseのHBase
Shellのようなもの)
非常に単純な機能しか無いので、ちょっとしたデータ確認やちょっとしたデータ更新にしか使えないかも。
cassandra CLIはJavaで書かれている。実行されるクラスはorg.apache.cassandra.cli.CliClient。
Windowsからは、CLIのバッチファイルを実行して起動する。
%CASSANDRA_HOME%\bin\cassandra-cli.bat
起動時に接続先のIPアドレス・ポート番号を指定する事も出来る。(起動後にconnectが不要になる)
%CASSANDRA_HOME%\bin\cassandra-cli.bat --host localhost --port 9160
CLIからhelpコマンド(あるいは「?」)を打ち込むとcassandra CLIのコマンド一覧が表示される。
cassandra> help cassandra> ?
helpとexit・connect以外のコマンドは、Cassandraに接続していないと使えない。
分類 | コマンド名 | 引数 | 概要 | RDBのSQL相当 |
---|---|---|---|---|
CLI | exit quit |
cassandra CLIを終了する。 | ||
サーバー | connect | ホスト名/ポート | Cassandraに接続する。 | |
show config file | サーバーのstorage-conf.xmlの内容を表示する。 | |||
show api version | サーバーAPIのバージョンを表示する。 | |||
show cluster name | クラスター名を表示する。 | |||
show keyspaces | クラスター内のキースペース一覧を表示する。 | |||
describe keyspace | キースペース名 | キースペースの定義を表示する。 | ||
データアクセス | get | テーブル. キー. カラム名 |
テーブルのデータを表示する。 | select |
set | テーブル. キー. カラム名 = 値 |
テーブルにデータを入れる。 | insert update |
|
del | テーブル. キー. カラム名 |
テーブルのデータを削除する。 | delete | |
count | テーブル. キー |
レコードに入っているカラム数を表示する。 |
CLIには(というかCassandraのクライアント側から)キースペースやカラムファミリーを作成したり追加・削除したりする機能は無い。
変更したい場合はstorage-conf.xmlのKeyspaceを修正し、Cassandraを再起動する必要がある。
Cassandraに接続するコマンド。
cassandra> connect localhost/9160 Connected to: "Test Cluster" on localhost/9160
接続に成功すると、クラスター名が表示される。
接続中のクラスター名を表示するコマンド。
→Thrift APIのdescribe_cluster_name()
cassandra> show cluster name Test Cluster
クラスター内のキースペースの一覧を表示するコマンド。
→Thrift APIのdescribe_keyspaces()
cassandra> show keyspaces Keyspace1 system
キースペースの定義(カラムファミリーの一覧)を表示するコマンド。
→Thrift APIのdescribe_keyspace()
cassandra> describe keyspace Keyspace1 Keyspace1.Super1 Column Family Type: Super Columns Sorted By: org.apache.cassandra.db.marshal.BytesType@11adeb7 Column Family Type: Super Column Sorted By: org.apache.cassandra.db.marshal.BytesType flush period: null minutes ------ Keyspace1.Standard2 Column Family Type: Standard Columns Sorted By: org.apache.cassandra.db.marshal.UTF8Type@113e8f3 Column Family Type: Standard Column Sorted By: org.apache.cassandra.db.marshal.UTF8Type flush period: null minutes ------ Keyspace1.Super2 Column Family Type: Super Columns Sorted By: org.apache.cassandra.db.marshal.UTF8Type@22e177 Column Family Type: Super Column Sorted By: org.apache.cassandra.db.marshal.UTF8Type flush period: null minutes ------ Keyspace1.Standard1 Column Family Type: Standard Columns Sorted By: org.apache.cassandra.db.marshal.BytesType@6765 Column Family Type: Standard Column Sorted By: org.apache.cassandra.db.marshal.BytesType flush period: null minutes ------ Keyspace1.StandardByUUID1 Column Family Type: Standard Columns Sorted By: org.apache.cassandra.db.marshal.TimeUUIDType@842e74 Column Family Type: Standard Column Sorted By: org.apache.cassandra.db.marshal.TimeUUIDType flush period: null minutes ------
存在しないキースペースを指定すると例外が発生する。
(この場合、Cassandraのサーバー側のコンソールにも例外のスタックトレースが表示される)
cassandra> describe keyspace Keyspace2
Exception Internal error processing describe_keyspace
describeの直後のキーワード「keyspace」を省略すると、エラーメッセージは出るが、一覧自体は表示される。
(Cassandra0.6より未来のバージョンで別のキーワードが追加されるのを見越しているのかも)
cassandra> describe Keyspace1
line 1:9 missing K_TABLE at 'Keyspace1'
〜
テーブル(カラムファミリー・カラム)からデータを取得して表示するコマンド。
→Thrift APIのget()
キーのみ指定 |
cassandra> get Keyspace1.Standard2['jsmith'] => (column=last, value=Smith, timestamp=1273401786421000) => (column=first, value=John, timestamp=1273401776968000) => (column=age, value=42, timestamp=1273401792781000) Returned 3 results. |
キースペース名.カラムファミリー名.[キー値] という形式で指定すると、 レコードにセットされている全データが表示される。 |
cassandra> get Keyspace1.Super1['jsmith'] => (super_column=6e616d65, (column=6669727374, value=John, timestamp=1273401380984000) (column=6c617374, value=Smith, timestamp=1273401712765000)) => (super_column=61747472, (column=616765, value=42, timestamp=1273401719343000)) Returned 2 results. |
スーパーカラムの場合、スーパーカラム名やカラム名は 文字コード(十六進数)で表示される。 (UTF-8のバイト配列になって登録されている為) |
|
カラムを指定 (通常のカラム) |
cassandra> get Keyspace1.Standard2['jsmith']['age'] => (column=age, value=42, timestamp=1273401792781000) |
スーパーカラムの無いカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][カラム名] という形式で指定すると、 そのカラムのデータが表示される。 |
カラムを指定 (スーパーカラム) |
cassandra> get Keyspace1.Super1['jsmith']['attr']['age'] => (column=616765, value=42, timestamp=1273401719343000) |
スーパーカラムが指定されているカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][スーパーカラム名][カラム名] という形式で指定すると、 そのカラムのデータが表示される。 |
スーパーカラムを指定 |
cassandra> get Keyspace1.Super1['jsmith']['name'] => (column=6c617374, value=Smith, timestamp=1273401712765000) => (column=6669727374, value=John, timestamp=1273401380984000) Returned 2 results. |
スーパーカラムが指定されているカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][スーパーカラム名] という形式で指定すると、 そのスーパーカラム内の全データが表示される。 |
存在しないカラムを指定すると、例外が発生する。
cassandra> get Keyspace1.Standard2['jsmith']['age2']
Exception null
キーを指定せずに全データを(あるいは全キーを)表示する方法は無さげ。
テーブル(カラムファミリー・カラム)にデータをセットするコマンド。
→Thrift APIのinsert()
カラムを指定 (通常のカラム) |
cassandra> set Keyspace1.Standard2['jsmith']['first'] = 'John' Value inserted. cassandra> set Keyspace1.Standard2['jsmith']['last'] = 'Smith' Value inserted. cassandra> set Keyspace1.Standard2['jsmith']['age'] = '42' Value inserted. |
スーパーカラムの無いカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][カラム名] という形式で指定すると、そのカラムにデータがセットされる。 |
カラムを指定 (スーパーカラム) |
cassandra> set Keyspace1.Super1['jsmith']['name']['first'] = 'John' Value inserted. cassandra> set Keyspace1.Super1['jsmith']['name']['last'] = 'Smith' Value inserted. cassandra> set Keyspace1.Super1['jsmith']['attr']['age'] = '42' Value inserted. |
スーパーカラムが指定されているカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][スーパーカラム名][カラム名] という形式で指定すると、そのカラムにデータがセットされる。 |
CLIのsetコマンドによって値を登録した場合、タイムスタンプにはマイクロ秒(10-6秒)単位でその時点の日時が記録される。
ただしJavaの「System.currentTimeMillis()
* 1000
」によって設定されるので、ミリ秒(10-3秒)未満の部分は常に0になる。
マイクロ秒になっているのは、他の言語との互換性の為らしい。
データモデルの説明では「アプリ内で統一が取れていれば何でもいい」と書かれているが、CLIがマイクロ秒単位でセットするので、他のアプリでもマイクロ秒で扱っておく方が無難だろう。
テーブル(カラムファミリー・カラム)からデータを削除するコマンド。
→Thrift APIのremove()
キーのみ指定 |
cassandra> del Keyspace1.Standard2['jsmith'] row removed. |
キーだけを指定した場合、そのレコードが削除される。 |
カラムを指定 (通常のカラム) |
cassandra> del Keyspace1.Standard2['jsmith']['age'] column removed. |
カラムを指定すると、そのカラムのデータのみがクリアされる。 |
カラムを指定 (スーパーカラム) |
cassandra> del Keyspace1.Super1['jsmith']['attr']['age'] column removed. |
削除は何回行ってもエラーにならない。
(あるいは存在しないキー・カラムを削除してもエラーにならない)
レコードに入っているデータ(カラム)の個数を表示するコマンド。
(RDBの集約関数countと異なり、テーブル内のレコード数を返すものではない)
→Thrift APIのget_count()
キーのみ指定 |
cassandra> count Keyspace1.Standard2['jsmith'] 3 columns cassandra> count Keyspace1.Super1['jsmith'] 2 columns |
キーだけを指定した場合、そのレコード内のカラム数が表示される。 スーパーカラムを指定しているカラムファミリーの場合、 スーパーカラムの個数が表示される。 |
スーパーカラムを指定 |
cassandra> count Keyspace1.Super1['jsmith']['name'] 2 columns |
スーパーカラムが指定されているカラムファミリーの場合キースペース名.カラムファミリー名.[キー値][スーパーカラム名] という形式で指定すると、そのスーパーカラム内のカラム数が表示される。 |
カラムまで指定することも出来るが、(カラムが存在していても無くても)常に1が返るだけなので、あまり意味が無い(苦笑)