Cassandra-quick-guide
Cassandra-はじめに
Apache Cassandraは、多くのコモディティサーバーで大量のデータを処理するように設計された、非常にスケーラブルで高性能な分散データベースであり、単一障害点のない高可用性を提供します。 これは、NoSQLデータベースの一種です。 まず、NoSQLデータベースの機能を理解しましょう。
NoSQLDatabase
NoSQLデータベース(Not Only SQLと呼ばれることもあります)は、リレーショナルデータベースで使用される表形式の関係以外のデータを格納および取得するメカニズムを提供するデータベースです。 これらのデータベースはスキーマフリーで、簡単なレプリケーションをサポートし、シンプルなAPIを持ち、最終的に一貫性があり、大量のデータを処理できます。
NoSQLデータベースの主な目的は
- 設計のシンプルさ、
- 水平スケーリング、および
- 可用性をより細かく制御します。
NoSqlデータベースは、リレーショナルデータベースとは異なるデータ構造を使用します。 NoSQLの一部の操作を高速化します。 特定のNoSQLデータベースの適合性は、解決しなければならない問題によって異なります。
NoSQLと リレーショナルデータベース
次の表に、リレーショナルデータベースとNoSQLデータベースを区別するポイントを示します。
Relational Database | NoSql Database |
---|---|
Supports powerful query language. | Supports very simple query language. |
It has a fixed schema. | No fixed schema. |
Follows ACID (Atomicity, Consistency, Isolation, and Durability). | It is only “eventually consistent”. |
Supports transactions. | Does not support transactions. |
Cassandraのほかに、非常に人気のある次のNoSQLデータベースがあります-
- Apache HBase -HBaseは、GoogleのBigTableをモデルにしたJavaで記述されたオープンソースの非リレーショナル分散データベースです。 Apache Hadoopプロジェクトの一部として開発され、HDFS上で実行され、HadoopにBigTableのような機能を提供します。
- MongoDB -MongoDBはクロスプラットフォームのドキュメント指向データベースシステムであり、従来のテーブルベースのリレーショナルデータベース構造を使用することを避け、動的スキーマを持つJSONのようなドキュメントを優先して、特定のタイプのアプリケーションでのデータの統合をより簡単かつ高速にします。
Apache Cassandraとは何ですか?
Apache Cassandraは、世界中に分散している大量の構造化データを管理するための、オープンソースの分散および分散/分散ストレージシステム(データベース)です。 単一障害点のない高可用性サービスを提供します。
以下は、Apache Cassandraの注目すべき点の一部です-
- スケーラブルで、フォールトトレラントで、一貫性があります。
- これは、列指向のデータベースです。
- その配信設計は、AmazonのDynamoとGoogleのBigtableのデータモデルに基づいています。
- Facebookで作成され、リレーショナルデータベース管理システムとは大きく異なります。
- Cassandraは、単一障害点のないDynamoスタイルのレプリケーションモデルを実装しますが、より強力な「カラムファミリ」データモデルを追加します。
- Cassandraは、Facebook、Twitter、Cisco、Rackspace、ebay、Twitter、Netflixなどの大企業で使用されています。
Cassandraの機能
Cassandraは、その優れた技術的特徴のために非常に人気があります。 Cassandraの機能の一部を以下に示します。
- 弾性のスケーラビリティ-Cassandraは非常にスケーラブルです。より多くの顧客とより多くのデータに対応するためにハードウェアを追加することができます 要求。
- 常にアーキテクチャ-Cassandraには単一障害点がなく、障害を許容できないビジネスクリティカルなアプリケーションで継続的に利用できます。
- 高速線形スケールパフォーマンス-Cassandraは線形にスケーラブルです。つまり、クラスター内のノード数を増やすとスループットが向上します。 したがって、迅速な応答時間を維持します。
- 柔軟なデータストレージ-Cassandraは、構造化、半構造化、非構造化など、可能なすべてのデータ形式に対応しています。 必要に応じて、データ構造の変更に動的に対応できます。
- 簡単なデータ配布-Cassandraは、複数のデータセンターにデータを複製することにより、必要な場所にデータを柔軟に配布できます。
- トランザクションサポート-Cassandraは、原子性、一貫性、分離、および耐久性(ACID)などのプロパティをサポートします。
- 高速書き込み-Cassandraは、安価な汎用ハードウェアで実行するように設計されています。 非常に高速な書き込みを実行し、読み取り効率を犠牲にすることなく、数百テラバイトのデータを保存できます。
カサンドラの歴史
- Cassandraは、受信トレイ検索用にFacebookで開発されました。
- 2008年7月にFacebookによってオープンソース化されました。
- Cassandraは2009年3月にApache Incubatorに承認されました。
- 2010年2月からApacheトップレベルプロジェクトになりました。
Cassandra-アーキテクチャ
Cassandraの設計目標は、単一障害点なしで複数のノードにわたるビッグデータのワークロードを処理することです。 Cassandraには、ノード間でピアツーピア分散システムがあり、データはクラスター内のすべてのノードに分散されます。
- クラスター内のすべてのノードは同じ役割を果たします。 各ノードは独立しており、同時に他のノードに相互接続されています。
- クラスター内の各ノードは、データがクラスター内の実際の場所に関係なく、読み取りおよび書き込み要求を受け入れることができます。
- ノードがダウンすると、ネットワーク内の他のノードから読み取り/書き込み要求を処理できます。
Cassandraでのデータ複製
Cassandraでは、クラスター内の1つ以上のノードが特定のデータのレプリカとして機能します。 一部のノードが古い値で応答したことが検出された場合、Cassandraはクライアントに最新の値を返します。 最新の値を返した後、Cassandraはバックグラウンドで read repair を実行し、古い値を更新します。
次の図は、Cassandraがクラスター内のノード間でデータ複製を使用して、単一障害点がないことを確認する方法の概略図を示しています。
注意-Cassandraは、バックグラウンドで Gossip Protocol を使用して、ノードが相互に通信し、クラスター内の障害のあるノードを検出できるようにします。
Cassandraのコンポーネント
Cassandraの主要なコンポーネントは次のとおりです-
- ノード-データが保存される場所です。
- データセンター-関連ノードのコレクションです。
- クラスター-クラスターは、1つ以上のデータセンターを含むコンポーネントです。
- コミットログ-コミットログはCassandraのクラッシュリカバリメカニズムです。 書き込み操作はすべてコミットログに書き込まれます。
- Mem-table -mem-tableはメモリ常駐データ構造です。 コミットログの後、データはmem-tableに書き込まれます。 単一列のファミリの場合、複数のmem-tableが存在する場合があります。
- SSTable -内容がしきい値に達すると、データがmem-tableからフラッシュされるディスクファイルです。
- ブルームフィルター-これらは、要素がセットのメンバーであるかどうかをテストするための、迅速で非決定的なアルゴリズムにすぎません。 これは特別な種類のキャッシュです。 ブルームフィルターは、クエリごとにアクセスされます。
Cassandraクエリ言語
ユーザーは、Cassandra Query Language(CQL)を使用して、ノードを介してCassandraにアクセスできます。 CQLは、データベース*(Keyspace)をテーブルのコンテナとして扱います。 プログラマは、 cqlsh:*プロンプトを使用して、CQLまたは個別のアプリケーション言語ドライバーを操作します。
クライアントは、読み取り/書き込み操作のためにいずれかのノードにアプローチします。 そのノード(コーディネーター)は、クライアントとデータを保持するノードの間でプロキシを再生します。
書き込み操作
ノードのすべての書き込みアクティビティは、ノードに書き込まれた*コミットログ*によってキャプチャされます。 その後、データはキャプチャされ、 mem-table に保存されます。mem-tableがいっぱいになると、データは SStable データファイルに書き込まれます。 すべての書き込みは自動的に分割され、クラスター全体に複製されます。 Cassandraは定期的にSSTableを統合し、不要なデータを破棄します。
読み取り操作
読み取り操作中、Cassandraはmem-tableから値を取得し、ブルームフィルターをチェックして、必要なデータを保持する適切なSSTableを見つけます。
Cassandra-データモデル
Cassandraのデータモデルは、RDBMSで通常見られるものとは大きく異なります。 この章では、Cassandraがデータを保存する方法の概要を示します。
クラスタ
Cassandraデータベースは、一緒に動作する複数のマシンに分散されています。 最も外側のコンテナは、クラスタとして知られています。 障害処理のために、すべてのノードにレプリカが含まれており、障害が発生した場合はレプリカが担当します。 Cassandraは、クラスター内のノードをリング形式で配置し、データを割り当てます。
キースペース
キースペースは、Cassandraのデータの最も外側のコンテナーです。 Cassandraのキースペースの基本的な属性は次のとおりです-
- 複製係数-同じデータのコピーを受信するクラスター内のマシンの数です。
- レプリカ配置戦略-リングにレプリカを配置する戦略に他なりません。 単純な戦略(ラック対応戦略)、古いネットワークトポロジ戦略(ラック対応戦略)、ネットワークトポロジ戦略(データセンター共有戦略)などの戦略があります。
- 列ファミリ-キースペースは、1つ以上の列ファミリのリストのコンテナです。 列ファミリは、行のコレクションのコンテナです。 各行には順序付けられた列が含まれます。 列ファミリは、データの構造を表します。 各キースペースには、少なくとも1つ、多くの場合、多くの列ファミリがあります。
キースペースを作成する構文は次のとおりです-
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
次の図は、キースペースの概略図を示しています。
列ファミリー
列ファミリは、順序付けされた行のコレクションのコンテナです。 各行は、順番に列の順序付けられたコレクションです。 次の表は、列ファミリをリレーショナルデータベースのテーブルと区別するポイントを示しています。
Relational Table | Cassandra column Family |
---|---|
A schema in a relational model is fixed. Once we define certain columns for a table, while inserting data, in every row all the columns must be filled at least with a null value. | In Cassandra, although the column families are defined, the columns are not. You can freely add any column to any column family at any time. |
Relational tables define only columns and the user fills in the table with values. | In Cassandra, a table contains columns, or can be defined as a super column family. |
Cassandra列ファミリーには、次の属性があります-
- keys_cached -SSTableごとにキャッシュを保持する場所の数を表します。
- rows_cached -コンテンツ全体がメモリにキャッシュされる行の数を表します。
- preload_row_cache -行キャッシュに事前入力するかどうかを指定します。
- 注意-*列ファミリのスキーマが固定されていないリレーショナルテーブルとは異なり、Cassandraは個々の行にすべての列を強制しません。
次の図は、Cassandra列ファミリーの例を示しています。
カラム
列は、キーまたは列の名前、値、タイムスタンプの3つの値を持つCassandraの基本的なデータ構造です。 以下に列の構造を示します。
スーパーコラム
スーパー列は特別な列であるため、キーと値のペアでもあります。 ただし、スーパー列にはサブ列のマップが格納されます。
通常、列ファミリはディスク上の個々のファイルに保存されます。 そのため、パフォーマンスを最適化するには、同じ列ファミリで一緒にクエリを実行する可能性のある列を保持することが重要であり、ここではスーパー列が役立ちます。スーパー列の構造を次に示します。
CassandraおよびRDBMSのデータモデル
次の表に、CassandraのデータモデルとRDBMSのデータモデルを区別するポイントを示します。
RDBMS | Cassandra |
---|---|
RDBMS deals with structured data. | Cassandra deals with unstructured data. |
It has a fixed schema. | Cassandra has a flexible schema. |
In RDBMS, a table is an array of arrays. (ROW x COLUMN) | In Cassandra, a table is a list of “nested key-value pairs”. (ROW x COLUMN key x COLUMN value) |
Database is the outermost container that contains data corresponding to an application. | Keyspace is the outermost container that contains data corresponding to an application. |
Tables are the entities of a database. | Tables or column families are the entity of a keyspace. |
Row is an individual record in RDBMS. | Row is a unit of replication in Cassandra. |
Column represents the attributes of a relation. | Column is a unit of storage in Cassandra. |
RDBMS supports the concepts of foreign keys, joins. | Relationships are represented using collections. |
Cassandra-インストール
Cassandraは、cqlshとさまざまな言語のドライバーを使用してアクセスできます。 この章では、Cassandraで動作するようにcqlshとjava環境の両方を設定する方法について説明します。
インストール前のセットアップ
Linux環境にCassandraをインストールする前に、 ssh (Secure Shell)を使用してLinuxをセットアップする必要があります。 Linux環境をセットアップするには、以下の手順に従ってください。
ユーザーを作成する
最初は、Hadoopの別のユーザーを作成して、HadoopファイルシステムをUnixファイルシステムから分離することをお勧めします。 以下の手順に従ってユーザーを作成します。
*コマンド「“ su”* 」を使用してルートを開きます。
* *“ useradd username” *コマンドを使用して、rootアカウントからユーザーを作成します。
* これで、*“ su username” *コマンドを使用して既存のユーザーアカウントを開くことができます。
Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
SSHセットアップとキー生成
SSHのセットアップは、デーモンシェル操作の開始、停止、分散など、クラスターでさまざまな操作を実行するために必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。
次のコマンドは、SSHを使用してキーと値のペアを生成するために使用されます-
- id_rsa.pubの公開鍵をauthorized_keysにコピーし、
- 所有者を提供し、
- それぞれauthorized_keysファイルの読み取りおよび書き込み権限。
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
- sshを確認します。
ssh localhost
Javaのインストール
JavaはCassandraの主要な前提条件です。 まず第一に、次のコマンドを使用してシステム内のJavaの存在を確認する必要があります-
$ java -version
すべてが正常に機能する場合、次の出力が得られます。
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
システムにJavaがない場合は、Javaをインストールするための以下の手順に従ってください。
ステップ1
次のhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-%0A1880260l[link:]からjava(JDK <最新バージョン>-X64.tar.gz)をダウンロードします
その後、jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
ステップ3
Javaをすべてのユーザーが使用できるようにするには、Javaをロケーション「/usr/local/」に移動する必要があります。 ルートを開き、次のコマンドを入力します。
$ su
password:
# mv jdk1.7.0_71/usr/local/
# exit
ステップ4
*PATH* および *JAVA_HOME* 変数を設定するには、*〜/.bashrc *ファイルに次のコマンドを追加します。
export JAVA_HOME =/usr/local/jdk1.7.0_71
export PATH = $PATH:$JAVA_HOME/bin
すべての変更を現在実行中のシステムに適用します。
$ source ~/.bashrc
ステップ5
次のコマンドを使用して、Javaの代替を構成します。
# alternatives --install/usr/bin/java java usr/local/java/bin/java 2
# alternatives --install/usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install/usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar
上記で説明したように、ターミナルから java -version コマンドを使用します。
パスを設定する
以下に示すように、Cassandraパスのパスを「/.bashrc」に設定します。
[hadoop@linux ~]$ gedit ~/.bashrc
export CASSANDRA_HOME = ~/cassandra
export PATH = $PATH:$CASSANDRA_HOME/bin
ダウンロードCassandra
Apache Cassandraは、http://cassandra.apache.org/download/で入手できます。[ダウンロードリンク] Cassandraは、次のコマンドを使用して入手できます。
$ wget http://supergsego.com/apache/cassandra/2.1.2/apache-cassandra-2.1.2-bin.tar.gz
以下に示すように、コマンド zxvf を使用してCassandraを解凍します。
$ tar zxvf apache-cassandra-2.1.2-bin.tar.gz.
以下に示すように、cassandraという名前の新しいディレクトリを作成し、ダウンロードしたファイルの内容をそこに移動します。
$ mkdir Cassandra
$ mv apache-cassandra-2.1.2/* cassandra.
Cassandraを構成する
- cassandra.yaml:ファイルを開きます。このファイルは、Cassandraの *bin ディレクトリにあります。
$ gedit cassandra.yaml
注意-debまたはrpmパッケージからCassandraをインストールした場合、設定ファイルはCassandraの /etc/cassandra ディレクトリにあります。
上記のコマンドは cassandra.yaml ファイルを開きます。 次の構成を確認します。 デフォルトでは、これらの値は指定されたディレクトリに設定されます。
*data_file_directories* “/var/lib/cassandra/data” *
*commitlog_directory* 「/var/lib/cassandra/commitlog」*
*saved_caches_directory* “/var/lib/cassandra/saved_caches” *
以下に示すように、これらのディレクトリが存在し、書き込み可能であることを確認してください。
ディレクトリを作成する
スーパーユーザーとして、Cassandraがデータを書き込む /var/lib/cassandra および /var。/log/cassandra の2つのディレクトリを作成します。
[root@linux cassandra]# mkdir/var/lib/cassandra
[root@linux cassandra]# mkdir/var/log/cassandra
フォルダーにアクセス許可を与える
以下に示すように、新しく作成されたフォルダーに読み取り/書き込み権限を付与します。
[root@linux/]# chmod 777/var/lib/cassandra
[root@linux/]# chmod 777/var/log/cassandra
Cassandraを起動します
Cassandraを起動するには、ターミナルウィンドウを開き、Cassandraを解凍したCassandraのホームディレクトリ/ホームに移動し、次のコマンドを実行してCassandraサーバーを起動します。
$ cd $CASSANDRA_HOME
$./bin/cassandra -f
–fオプションを使用すると、Cassandraはバックグラウンドプロセスとして実行するのではなく、フォアグラウンドにとどまります。 すべてがうまくいけば、Cassandraサーバーが起動していることがわかります。
プログラミング環境
プログラムでCassandraを設定するには、次のjarファイルをダウンロードします-
- slf4j-api-1.7.5.jar
- cassandra-driver-core-2.0.2.jar
- guava-16.0.1.jar
- metrics-core-3.0.2.jar
- netty-3.9.0.Final.jar
それらを別のフォルダーに配置します。 たとえば、これらのjarを*“ Cassandra_jars” *という名前のフォルダーにダウンロードしています。
以下に示すように、このフォルダーのクラスパスを“。bashrc”ファイルに設定します。
[hadoop@linux ~]$ gedit ~/.bashrc
//Set the following class path in the .bashrc file.
export CLASSPATH = $CLASSPATH:/home/hadoop/Cassandra_jars/*
Eclipse環境
Eclipseを開き、Cassandra _Examplesという新しいプロジェクトを作成します。
プロジェクトを右クリックして、以下に示すように[*ビルドパス]→[ビルドパスの構成]を選択します。
プロパティウィンドウが開きます。 [ライブラリ]タブで、[外部JARを追加]を選択します。 jarファイルを保存したディレクトリに移動します。 5つのjarファイルをすべて選択し、以下に示すように[OK]をクリックします。
参照ライブラリでは、以下に示すように追加されたすべての必要なjarを見ることができます-
Mavenの依存関係
以下は、mavenを使用してCassandraプロジェクトを構築するためのpom.xmlです。
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.9.0.Final</version>
</dependency>
</dependencies>
</project>
Cassandra-参照API
この章では、Cassandraのすべての重要なクラスについて説明します。
クラスタ
このクラスは、ドライバーのメインエントリポイントです。 com.datastax.driver.core パッケージに属します。
方法
S. No. | Methods and Description |
---|---|
*1 *a |
現在のクラスターに新しいセッションを作成し、初期化します。 |
*2 *a |
クラスタインスタンスを閉じるために使用されます。 |
*3 *a |
新しいCluster.Builderインスタンスを作成するために使用されます。 |
Cluster.Builder
このクラスは、 Cluster.Builder クラスをインスタンス化するために使用されます。
方法
S. No | Methods and Description |
---|---|
*1 *a |
このメソッドは、クラスターに接点を追加します。 |
*2 *a |
このメソッドは、指定された接点でクラスターを構築します。 |
セッション
このインターフェースは、Cassandraクラスターへの接続を保持します。 このインターフェイスを使用して、 CQL クエリを実行できます。 com.datastax.driver.core パッケージに属します。
方法
S. No. | Methods and Description |
---|---|
*1 *a |
このメソッドは、現在のセッションインスタンスを閉じるために使用されます。 |
*2 *a |
このメソッドは、クエリを実行するために使用されます。 ステートメントオブジェクトが必要です。 |
*3 *a |
このメソッドは、クエリを実行するために使用されます。 Stringオブジェクトの形式のクエリが必要です。 |
*4 *a |
このメソッドは、提供されたクエリを準備します。 クエリは、ステートメントの形式で提供されます。 |
5*** *a |
このメソッドは、提供されたクエリを準備します。 クエリは文字列の形式で提供されます。 |
カサンドラ-Cqlsh
この章では、Cassandraクエリ言語シェルを紹介し、そのコマンドの使用方法について説明します。
デフォルトでは、Cassandraはユーザーが通信できるプロンプトCassandraクエリ言語シェル*(cqlsh)を提供します。 このシェルを使用して、 Cassandra Query Language(CQL)*を実行できます。
cqlshを使用すると、次のことができます。
- スキーマを定義し、
- データを挿入し、
- クエリを実行します。
cqlshの開始
以下に示すように、コマンド cqlsh を使用してcqlshを起動します。 Cassandra cqlshプロンプトを出力として提供します。
[hadoop@linux bin]$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cqlsh>
*Cqlsh* -上記のように、このコマンドはcqlshプロンプトを開始するために使用されます。 さらに、いくつかのオプションもサポートしています。 次の表は、 *cqlsh* のすべてのオプションとその使用法を説明しています。
Options | Usage |
---|---|
cqlsh --help | Shows help topics about the options of *cqlsh *commands. |
cqlsh --version | Provides the version of the cqlsh you are using. |
cqlsh --color | Directs the shell to use colored output. |
cqlsh --debug | Shows additional debugging information. |
cqlsh --execute cql_statement |
Directs the shell to accept and execute a CQL command. |
cqlsh --file=* “file name” * | If you use this option, Cassandra executes the command in the given file and exits. |
cqlsh --no-color | Directs Cassandra not to use colored output. |
cqlsh -u* “user name” * | Using this option, you can authenticate a user. The default user name is: cassandra. |
cqlsh-p* “pass word”* | Using this option, you can authenticate a user with a password. The default password is: cassandra. |
Cqlshコマンド
Cqlshには、ユーザーが操作できるコマンドがいくつかあります。 コマンドを以下にリストします。
文書化されたシェルコマンド
以下は、Cqlshで文書化されたシェルコマンドです。 これらは、ヘルプトピックの表示、cqlshの終了、describeなどのタスクを実行するために使用されるコマンドです。
- HELP -すべてのcqlshコマンドのヘルプトピックを表示します。
- CAPTURE -コマンドの出力をキャプチャし、ファイルに追加します。
- CONSISTENCY -現在の一貫性レベルを表示するか、新しい一貫性レベルを設定します。
- COPY -Cassandraとの間でデータをコピーします。
- DESCRIBE -Cassandraとそのオブジェクトの現在のクラスターについて説明します。
- EXPAND -クエリの出力を垂直方向に拡張します。
- EXIT -このコマンドを使用すると、cqlshを終了できます。
- PAGING -クエリページングを有効または無効にします。
- SHOW -Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。
- SOURCE -CQLステートメントを含むファイルを実行します。
- TRACING -要求のトレースを有効または無効にします。
CQLデータ定義コマンド
- キースペースの作成-Cassandraでキースペースを作成します。
- USE -作成されたキースペースに接続します。
- ALTER KEYSPACE -キースペースのプロパティを変更します。
- DROP KEYSPACE -キースペースを削除します
- CREATE TABLE -KeySpaceにテーブルを作成します。
- ALTER TABLE -テーブルの列プロパティを変更します。
- DROP TABLE -テーブルを削除します。
- TRUNCATE -テーブルからすべてのデータを削除します。
- CREATE INDEX -テーブルの単一の列に新しいインデックスを定義します。
- DROP INDEX -名前付きインデックスを削除します。
CQLデータ操作コマンド
- INSERT -テーブルの行に列を追加します。
- UPDATE -行の列を更新します。
- DELETE -テーブルからデータを削除します。
- BATCH -複数のDMLステートメントを一度に実行します。
CQL句
- SELECT -この句はテーブルからデータを読み取ります
- WHERE -特定のデータを読み取るために、where句をselectとともに使用します。
- ORDERBY -orderby節は、特定の順序で特定のデータを読み取るためにselectとともに使用されます。
Cassandra-シェルコマンド
Cassandraは、CQLコマンドに加えて、文書化されたシェルコマンドを提供します。 以下に、Cassandraが文書化したシェルコマンドを示します。
Help
HELPコマンドは、すべてのcqlshコマンドの概要と簡単な説明を表示します。 以下にhelpコマンドの使用法を示します。
cqlsh> help
Documented shell commands:
===========================
CAPTURE COPY DESCRIBE EXPAND PAGING SOURCE
CONSISTENCY DESC EXIT HELP SHOW TRACING.
CQL help topics:
================
ALTER CREATE_TABLE_OPTIONS SELECT
ALTER_ADD CREATE_TABLE_TYPES SELECT_COLUMNFAMILY
ALTER_ALTER CREATE_USER SELECT_EXPR
ALTER_DROP DELETE SELECT_LIMIT
ALTER_RENAME DELETE_COLUMNS SELECT_TABLE
キャプチャー
このコマンドは、コマンドの出力をキャプチャし、ファイルに追加します。 たとえば、 Outputfile という名前のファイルへの出力をキャプチャする次のコードを見てください。
cqlsh> CAPTURE '/home/hadoop/CassandraProgs/Outputfile'
ターミナルでコマンドを入力すると、指定されたファイルに出力がキャプチャされます。 以下に、使用されるコマンドと出力ファイルのスナップショットを示します。
cqlsh:finddevguides> select * from emp;
次のコマンドを使用して、キャプチャをオフにできます。
cqlsh:finddevguides> capture off;
一貫性
このコマンドは、現在の一貫性レベルを表示するか、新しい一貫性レベルを設定します。
cqlsh:finddevguides> CONSISTENCY
Current consistency level is 1.
Copy
このコマンドは、Cassandraとの間でデータをファイルにコピーします。 以下に、 emp という名前のテーブルをファイル myfile にコピーする例を示します。
cqlsh:finddevguides> COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;
4 rows exported in 0.034 seconds.
指定されたファイルを開いて確認すると、以下に示すようにコピーされたデータを見つけることができます。
説明する
このコマンドは、Cassandraとそのオブジェクトの現在のクラスターを記述します。 このコマンドのバリエーションを以下に説明します。
クラスタの説明-このコマンドは、クラスタに関する情報を提供します。
cqlsh:finddevguides> describe cluster;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner
Range ownership:
-658380912249644557 [127.0.0.1]
-2833890865268921414 [127.0.0.1]
-6792159006375935836 [127.0.0.1]
キースペースの説明-このコマンドは、クラスター内のすべてのキースペースを一覧表示します。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> describe keyspaces;
system_traces system tp finddevguides
テーブルの説明-このコマンドは、キースペース内のすべてのテーブルを一覧表示します。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> describe tables;
emp
*Describe table* -このコマンドは、テーブルの説明を提供します。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> describe table emp;
CREATE TABLE finddevguides.emp (
emp_id int PRIMARY KEY,
emp_city text,
emp_name text,
emp_phone varint,
emp_sal varint
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'min_threshold': '4', 'class':
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy',
'max_threshold': '32'}
AND compression = {'sstable_compression':
'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
CREATE INDEX emp_emp_sal_idx ON finddevguides.emp (emp_sal);
タイプの説明
このコマンドは、ユーザー定義のデータ型を記述するために使用されます。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> describe type card_details;
CREATE TYPE finddevguides.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
mail text
);
タイプの説明
このコマンドは、すべてのユーザー定義データ型をリストします。 以下に、このコマンドの使用法を示します。 card と card_details の2つのユーザー定義データ型があると仮定します。
cqlsh:finddevguides> DESCRIBE TYPES;
card_details card
展開する
このコマンドは、出力を展開するために使用されます。 このコマンドを使用する前に、expandコマンドをオンにする必要があります。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> expand on;
cqlsh:finddevguides> select * from emp;
@ Row 1
-----------+------------
emp_id | 1
emp_city | Hyderabad
emp_name | ram
emp_phone | 9848022338
emp_sal | 50000
@ Row 2
-----------+------------
emp_id | 2
emp_city | Delhi
emp_name | robin
emp_phone | 9848022339
emp_sal | 50000
@ Row 3
-----------+------------
emp_id | 4
emp_city | Pune
emp_name | rajeev
emp_phone | 9848022331
emp_sal | 30000
@ Row 4
-----------+------------
emp_id | 3
emp_city | Chennai
emp_name | rahman
emp_phone | 9848022330
emp_sal | 50000
(4 rows)
注-次のコマンドを使用して、展開オプションをオフにできます。
cqlsh:finddevguides> expand off;
Disabled Expanded output.
Exit
このコマンドは、cqlシェルを終了するために使用されます。
Show
このコマンドは、Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。 以下に、このコマンドの使用法を示します。
cqlsh:finddevguides> show host;
Connected to Test Cluster at 127.0.0.1:9042.
cqlsh:finddevguides> show version;
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
ソース
このコマンドを使用すると、ファイル内のコマンドを実行できます。 入力ファイルは次のようになっていると仮定します-
次に、以下に示すようにコマンドを含むファイルを実行できます。
cqlsh:finddevguides> source '/home/hadoop/CassandraProgs/inputfile';
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | Delhi | robin | 9848022339 | 50000
3 | Pune | rajeev | 9848022331 | 30000
4 | Chennai | rahman | 9848022330 | 50000
(4 rows)
Cassandra-キースペースの作成
Cqlshを使用してキースペースを作成する
Cassandraのキースペースは、ノード上のデータ複製を定義する名前空間です。 クラスターには、ノードごとに1つのキースペースが含まれます。 以下に、 CREATE KEYSPACE ステートメントを使用してキースペースを作成するための構文を示します。
構文
CREATE KEYSPACE <identifier> WITH <properties>
i.e.
CREATE KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
CREATE KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’}
AND durable_writes = ‘Boolean value’;
CREATE KEYSPACEステートメントには、 replication と durable_writes の2つのプロパティがあります。
複製
レプリケーションオプションは、*レプリカ配置戦略*と必要なレプリカの数を指定することです。 次の表に、すべてのレプリカ配置戦略を示します。
Strategy name | Description |
---|---|
Simple Strategy' | Specifies a simple replication factor for the cluster. |
Network Topology Strategy | Using this option, you can set the replication factor for each data-center independently. |
Old Network Topology Strategy | This is a legacy replication strategy. |
このオプションを使用すると、現在のKeySpaceの更新に commitlog を使用するかどうかをCassandraに指示できます。 このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下は、KeySpaceの作成例です。
- ここでは、 finddevguides という名前のKeySpaceを作成しています。
- 最初のレプリカ配置戦略、つまり Simple Strategy を使用しています。
- そして、複製係数を* 1レプリカ*に選択しています。
cqlsh.> CREATE KEYSPACE finddevguides
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
検証
コマンド Describe を使用して、テーブルが作成されているかどうかを確認できます。 このコマンドをキースペースに対して使用すると、以下に示すように作成されたすべてのキースペースが表示されます。
cqlsh> DESCRIBE keyspaces;
finddevguides system system_traces
ここで、新しく作成されたKeySpace finddevguides を確認できます。
Durable_writes
デフォルトでは、テーブルのpersistent_writesプロパティは true に設定されますが、falseに設定することもできます。 このプロパティを* simplex strategy。*に設定することはできません。
例
以下は、永続的な書き込みプロパティの使用方法を示す例です。
cqlsh> CREATE KEYSPACE test
... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 }
... AND DURABLE_WRITES = false;
検証
System Keyspaceを照会することにより、テストKeySpaceのpersistent_writesプロパティがfalseに設定されているかどうかを確認できます。 このクエリは、すべてのキースペースとそのプロパティを提供します。
cqlsh> SELECT * FROM system_schema.keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"}
finddevguides | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "4"}
system | True | org.apache.cassandra.locator.LocalStrategy | { }
system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "2"}
(4 rows)
ここで、KeySpaceがfalseに設定されているテストのpersistent_writesプロパティを確認できます。
キースペースを使用する
キーワード USE を使用して、作成されたKeySpaceを使用できます。 その構文は次のとおりです-
Syntax:USE <identifier>
例
次の例では、KeySpace * finddevguides。*を使用しています。
cqlsh> USE finddevguides;
cqlsh:finddevguides>
Java APIを使用してキースペースを作成する
*Session* クラスの* execute()*メソッドを使用してキースペースを作成できます。 以下の手順に従って、Java APIを使用してキースペースを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードでクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、 Cluster クラスの* connect()メソッドを使用して、 *Session オブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ステップ3:クエリを実行する
*Session* クラスの* execute()*メソッドを使用して *CQL* クエリを実行できます。 クエリを文字列形式で、または *Statement* クラスオブジェクトとして* execute()*メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 *cqlsh* で実行されます。
この例では、* tp。*という名前のKeySpaceを作成しています。最初のレプリカ配置戦略、つまりSimple Strategyを使用しており、1つのレプリカに対する複製係数を選択しています。
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
String query = "CREATE KEYSPACE tp WITH replication "
+ "= {'class':'SimpleStrategy', 'replication_factor':1}; ";
session.execute(query);
ステップ4:キースペースを使用する
以下に示すように、execute()メソッドを使用して、作成されたKeySpaceを使用できます。
execute(“ USE tp ” );
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Create_KeySpace {
public static void main(String args[]){
//Query
String query = "CREATE KEYSPACE tp WITH replication "
+ "= {'class':'SimpleStrategy', 'replication_factor':1};";
//creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect();
//Executing the query
session.execute(query);
//using the KeySpace
session.execute("USE tp");
System.out.println("Keyspace created");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Create_KeySpace.java
$java Create_KeySpace
通常の状態では、次の出力が生成されます-
Keyspace created
Cassandra-キースペースの変更
キースペースの変更
ALTER KEYSPACEを使用して、レプリカの数やKeySpaceのpermanent_writesなどのプロパティを変更できます。 以下に、このコマンドの構文を示します。
構文
ALTER KEYSPACE <identifier> WITH <properties>
i.e.
ALTER KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
*ALTER KEYSPACE* のプロパティはCREATE KEYSPACEと同じです。 *replication* と *durable_writes* の2つのプロパティがあります。
複製
複製オプションは、レプリカ配置戦略と必要なレプリカの数を指定します。
Durable_writes
このオプションを使用すると、現在のKeySpaceの更新にcommitlogを使用するかどうかをCassandraに指示できます。 このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下は、KeySpaceを変更する例です。
- ここでは、 finddevguides という名前のKeySpaceを変更しています。
- 複製係数を1から3に変更しています。
cqlsh.> ALTER KEYSPACE finddevguides
WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};
Durable_writesの変更
KeySpaceのpermanent_writesプロパティを変更することもできます。 以下に示すのは、 test KeySpaceのpermanent_writesプロパティです。
SELECT *FROM system.schema_keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
finddevguides | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
system | True | org.apache.cassandra.locator.LocalStrategy | { }
system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
(4 rows)
ALTER KEYSPACE test
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3}
AND DURABLE_WRITES = true;
ここでも、KeySpacesのプロパティを確認すると、次の出力が生成されます。
SELECT* FROM system.schema_keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | True | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
finddevguides | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
system | True | org.apache.cassandra.locator.LocalStrategy | { }
system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
(4 rows)
Java APIを使用してキースペースを変更する
*Session* クラスの* execute()*メソッドを使用してキースペースを変更できます。 Java APIを使用してキースペースを変更するには、以下の手順に従ってください
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、* Cluster クラスの connect()メソッドを使用して、 *Session オブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、または Statement クラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、
- tp という名前のキースペースを変更しています。 レプリケーションオプションを単純戦略からネットワークトポロジ戦略に変更しています。
- durable_writes をfalseに変更しています
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
//Query
String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = false;";
session.execute(query);
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Alter_KeySpace {
public static void main(String args[]){
//Query
String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}"
+ "AND DURABLE_WRITES = false;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect();
//Executing the query
session.execute(query);
System.out.println("Keyspace altered");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Alter_KeySpace.java
$java Alter_KeySpace
通常の状態では、次の出力が生成されます-
Keyspace Altered
Cassandra-キースペースをドロップ
キースペースの削除
コマンド DROP KEYSPACE を使用してキースペースをドロップできます。 以下は、KeySpaceをドロップするための構文です。
構文
DROP KEYSPACE <identifier>
i.e.
DROP KEYSPACE “KeySpace name”
例
次のコードは、キースペース finddevguides を削除します。
cqlsh> DROP KEYSPACE finddevguides;
検証
コマンド Describe を使用してキースペースを確認し、以下に示すようにテーブルが削除されているかどうかを確認します。
cqlsh> DESCRIBE keyspaces;
system system_traces
キースペースfinddevguidesを削除したため、キースペースリストに表示されません。
Java APIを使用してキースペースを削除する
Sessionクラスのexecute()メソッドを使用してキースペースを作成できます。 Java APIを使用してキースペースを削除するには、以下の手順に従ってください。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 文字列形式でこのメソッドに渡すものはすべて、cqlshで実行されます。
次の例では、 tp という名前のキースペースを削除しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
String query = "DROP KEYSPACE tp; ";
session.execute(query);
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Drop_KeySpace {
public static void main(String args[]){
//Query
String query = "Drop KEYSPACE tp";
//creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect();
//Executing the query
session.execute(query);
System.out.println("Keyspace deleted");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Delete_KeySpace.java
$java Delete_KeySpace
通常の状態では、次の出力を生成する必要があります-
Keyspace deleted
Cassandra-テーブルの作成
テーブルを作成する
コマンド CREATE TABLE を使用してテーブルを作成できます。 以下に、テーブルを作成するための構文を示します。
構文
CREATE (TABLE | COLUMNFAMILY) <tablename>
('<column-definition>' , '<column-definition>')
(WITH <option> AND <option>)
列の定義
以下に示すように列を定義できます。
column name1 data type,
column name2 data type,
example:
age int,
name text
主キー
主キーは、行を一意に識別するために使用される列です。 したがって、テーブルの作成中は主キーの定義が必須です。 主キーは、テーブルの1つ以上の列で構成されます。 以下に示すように、テーブルの主キーを定義できます。
CREATE TABLE tablename(
column1 name datatype PRIMARYKEY,
column2 name data type,
column3 name data type.
)
or
CREATE TABLE tablename(
column1 name datatype PRIMARYKEY,
column2 name data type,
column3 name data type,
PRIMARY KEY (column1)
)
例
以下は、cqlshを使用してCassandraでテーブルを作成する例です。 ここにいる-
- キースペースfinddevguidesの使用
- emp という名前のテーブルを作成する
従業員の名前、ID、市、給与、電話番号などの詳細が含まれます。 従業員IDは主キーです。
cqlsh> USE finddevguides;
cqlsh:finddevguides>; CREATE TABLE emp(
emp_id int PRIMARY KEY,
emp_name text,
emp_city text,
emp_sal varint,
emp_phone varint
);
検証
selectステートメントは、スキーマを提供します。 次に示すように、selectステートメントを使用してテーブルを確認します。
cqlsh:finddevguides> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+----------+----------+-----------+---------
(0 rows)
ここで、指定された列で作成されたテーブルを観察できます。 キースペースfinddevguidesを削除したため、キースペースリストに表示されません。
Java APIを使用したテーブルの作成
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。 以下の手順に従って、Java APIを使用してテーブルを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、 Cluster クラスの* connect()*メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“ tp” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 文字列形式でこのメソッドに渡すものはすべて、cqlshで実行されます。
次の例では、* emp。*という名前のテーブルを作成しています。以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
//Query
String query = "CREATE TABLE emp(emp_id int PRIMARY KEY, "
+ "emp_name text, "
+ "emp_city text, "
+ "emp_sal varint, "
+ "emp_phone varint );";
session.execute(query);
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Create_Table {
public static void main(String args[]){
//Query
String query = "CREATE TABLE emp(emp_id int PRIMARY KEY, "
+ "emp_name text, "
+ "emp_city text, "
+ "emp_sal varint, "
+ "emp_phone varint );";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Table created");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Create_Table.java
$java Create_Table
通常の状態では、次の出力を生成する必要があります-
Table created
Cassandra-変更テーブル
テーブルの変更
コマンド ALTER TABLE を使用して、テーブルを変更できます。 以下に、テーブルを作成するための構文を示します。
構文
ALTER (TABLE | COLUMNFAMILY) <tablename> <instruction>
ALTERコマンドを使用して、次の操作を実行できます-
- 列を追加する
- 列をドロップする
列を追加する
ALTERコマンドを使用して、テーブルに列を追加できます。 列を追加する際、列名が既存の列名と競合しないようにし、コンパクトストレージオプションでテーブルが定義されないように注意する必要があります。 以下は、テーブルに列を追加する構文です。
ALTER TABLE table name
ADD new column datatype;
例
以下は、既存のテーブルに列を追加する例です。 ここでは、テキストデータ型の emp_email という列を emp という名前のテーブルに追加しています。
cqlsh:finddevguides> ALTER TABLE emp
... ADD emp_email text;
- 検証 *
SELECTステートメントを使用して、列が追加されているかどうかを確認します。 ここで、新しく追加された列emp_emailを確認できます。
cqlsh:finddevguides> select* from emp;
emp_id | emp_city | emp_email | emp_name | emp_phone | emp_sal
--------+----------+-----------+----------+-----------+---------
列のドロップ
ALTERコマンドを使用して、テーブルから列を削除できます。 テーブルから列を削除する前に、テーブルがコンパクトストレージオプションで定義されていないことを確認してください。 以下に、ALTERコマンドを使用してテーブルから列を削除する構文を示します。
ALTER table name
DROP column name;
例
以下は、テーブルから列を削除する例です。 ここでは、 emp_email という名前の列を削除しています。
cqlsh:finddevguides> ALTER TABLE emp DROP emp_email;
検証
以下に示すように、 select ステートメントを使用して、列が削除されているかどうかを確認します。
cqlsh:finddevguides> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+----------+----------+-----------+---------
(0 rows)
*emp_email* 列が削除されたため、それを見つけることができなくなりました。
Java APIを使用してテーブルを変更する
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。 以下の手順に従って、Java APIを使用してテーブルを変更します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
Session session = cluster.connect(“ tp” );
ここでは、tpという名前のKeySpaceを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、* emp。*という名前のテーブルに列を追加しています。これを行うには、以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
//Query
String query1 = "ALTER TABLE emp ADD emp_email text";
session.execute(query);
以下は、既存のテーブルに列を追加するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Add_column {
public static void main(String args[]){
//Query
String query = "ALTER TABLE emp ADD emp_email text";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Column added");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Add_Column.java
$java Add_Column
通常の状態では、次の出力を生成する必要があります-
Column added
列を削除する
以下は、既存のテーブルから列を削除する完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Delete_Column {
public static void main(String args[]){
//Query
String query = "ALTER TABLE emp DROP emp_email;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//executing the query
session.execute(query);
System.out.println("Column deleted");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Delete_Column.java
$java Delete_Column
通常の状態では、次の出力を生成する必要があります-
Column deleted
Cassandra-ドロップテーブル
テーブルを削除する
コマンド Drop Table を使用して、テーブルをドロップできます。 その構文は次のとおりです-
構文
DROP TABLE <tablename>
例
次のコードは、KeySpaceから既存のテーブルを削除します。
cqlsh:finddevguides> DROP TABLE emp;
検証
Describeコマンドを使用して、テーブルが削除されているかどうかを確認します。 empテーブルは削除されているため、列ファミリリストにはありません。
cqlsh:finddevguides> DESCRIBE COLUMNFAMILIES;
employee
Java APIを使用したテーブルの削除
Sessionクラスのexecute()メソッドを使用して、テーブルを削除できます。 以下の手順に従って、Java APIを使用してテーブルを削除します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します-
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“Your keyspace name”);
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp という名前のテーブルを削除しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
//Query
String query = "DROP TABLE emp1;”;
session.execute(query);
以下は、Java APIを使用してCassandraにテーブルをドロップする完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Drop_Table {
public static void main(String args[]){
//Query
String query = "DROP TABLE emp1;";
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Table dropped");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Drop_Table.java
$java Drop_Table
通常の状態では、次の出力を生成する必要があります-
Table dropped
Cassandra-テーブルの切り捨て
テーブルの切り捨て
TRUNCATEコマンドを使用して、テーブルを切り捨てることができます。 テーブルを切り捨てると、テーブルのすべての行が完全に削除されます。 以下に、このコマンドの構文を示します。
構文
TRUNCATE <tablename>
例
次のデータを持つ student というテーブルがあると仮定しましょう。
s_id | s_name | s_branch | s_aggregate |
---|---|---|---|
1 | ram | IT | 70 |
2 | rahman | EEE | 75 |
3 | robbin | Mech | 72 |
select文を実行してテーブル student を取得すると、次の出力が得られます。
cqlsh:tp> select * from student;
s_id | s_aggregate | s_branch | s_name
------+-------------+----------+--------
1 | 70 | IT | ram
2 | 75 | EEE | rahman
3 | 72 | MECH | robbin
(3 rows)
ここで、TRUNCATEコマンドを使用してテーブルを切り捨てます。
cqlsh:tp> TRUNCATE student;
検証
*select* ステートメントを実行して、テーブルが切り捨てられているかどうかを確認します。 切り捨て後のスチューデントテーブルでのselectステートメントの出力を以下に示します。
cqlsh:tp> select * from student;
s_id | s_aggregate | s_branch | s_name
------+-------------+----------+--------
(0 rows)
Java APIを使用したテーブルの切り捨て
Sessionクラスのexecute()メソッドを使用して、テーブルを切り捨てることができます。 以下の手順に従って、テーブルを切り捨てます。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトの作成
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
Session session = cluster.connect(“ tp” );
ここでは、tpという名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp という名前のテーブルを切り捨てています。 以下に示すように、クエリを文字列変数に保存し、* execute()*メソッドに渡す必要があります。
//Query
String query = "TRUNCATE emp;;”;
session.execute(query);
Java APIを使用してCassandraのテーブルを切り捨てる完全なプログラムを以下に示します。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Truncate_Table {
public static void main(String args[]){
//Query
String query = "Truncate student;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Table truncated");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Truncate_Table.java
$java Truncate_Table
通常の状態では、次の出力を生成する必要があります-
Table truncated
Cassandra-バッチステートメント
バッチステートメントの使用
- BATCHを使用すると、複数の変更ステートメント(挿入、更新、削除)を同時に実行できます。 その構文は次のとおりです-
BEGIN BATCH
<insert-stmt>/<update-stmt>/<delete-stmt>
APPLY BATCH
例
次のデータを持つempと呼ばれるCassandraのテーブルがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Delhi | 9848022339 | 50000 |
3 | rahman | Chennai | 9848022330 | 45000 |
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID 3の従業員の給与を50000に更新します。 *行ID 2の従業員の都市を削除します。
上記の操作を一度に実行するには、次のBATCHコマンドを使用します-
cqlsh:finddevguides> BEGIN BATCH
... INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);
... UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
... DELETE emp_city FROM emp WHERE emp_id = 2;
... APPLY BATCH;
検証
変更後、SELECTステートメントを使用してテーブルを確認します。 それは次の出力を生成する必要があります-
cqlsh:finddevguides> select* from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | null | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | 50000
4 | Pune | rajeev | 9848022331 | 30000
(4 rows)
ここでは、データが変更されたテーブルを観察できます。
Java APIを使用したバッチステートメント
Sessionクラスのexecute()メソッドを使用して、バッチステートメントをプログラムでテーブルに書き込むことができます。 Java APIの助けを借りて、バッチステートメントを使用して複数のステートメントを実行するには、以下の手順に従います。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスタオブジェクトを作成します-
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ”);
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID 3の従業員の給与を50000に更新します。
- 行ID 2の従業員の都市を削除します。
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
String query1 = ” BEGIN BATCH INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);
UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
DELETE emp_city FROM emp WHERE emp_id = 2;
APPLY BATCH;”;
以下は、Java APIを使用してCassandraのテーブルで複数のステートメントを同時に実行する完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Batch {
public static void main(String args[]){
//query
String query =" BEGIN BATCH INSERT INTO emp (emp_id, emp_city,
emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);"
+ "UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;"
+ "DELETE emp_city FROM emp WHERE emp_id = 2;"
+ "APPLY BATCH;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Changes done");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Batch.java
$java Batch
通常の状態では、次の出力を生成する必要があります-
Changes done
Cassandra-データの作成
テーブルにデータを作成する
コマンド INSERT を使用して、テーブルの行の列にデータを挿入できます。 以下に、テーブルにデータを作成するための構文を示します。
INSERT INTO <tablename>
(<column1 name>, <column2 name>....)
VALUES (<value1>, <value2>....)
USING <option>
例
列(emp_id、emp_name、emp_city、emp_phone、emp_sal)を持つ emp というテーブルがあり、 emp テーブルに次のデータを挿入する必要があると仮定します。
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
以下のコマンドを使用して、テーブルに必要なデータを入力します。
cqlsh:finddevguides> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);
cqlsh:finddevguides> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(2,'robin', 'Hyderabad', 9848022339, 40000);
cqlsh:finddevguides> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(3,'rahman', 'Chennai', 9848022330, 45000);
検証
データを挿入した後、SELECTステートメントを使用して、データが挿入されたかどうかを確認します。 SELECTステートメントを使用してempテーブルを検証すると、次の出力が得られます。
cqlsh:finddevguides> SELECT * FROM emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | Hyderabad | robin | 9848022339 | 40000
3 | Chennai | rahman | 9848022330 | 45000
(3 rows)
ここで、挿入したデータがテーブルに取り込まれていることがわかります。
Java APIを使用したデータの作成
Sessionクラスのexecute()メソッドを使用して、テーブルにデータを作成できます。 以下の手順に従って、Java APIを使用してテーブルにデータを作成します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint("127.0.0.1");
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“ tp” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、または Statement クラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp というテーブルにデータを挿入しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
String query1 = “INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal)
VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);” ;
String query2 = “INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal)
VALUES(2,'robin', 'Hyderabad', 9848022339, 40000);” ;
String query3 = “INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal)
VALUES(3,'rahman', 'Chennai', 9848022330, 45000);” ;
session.execute(query1);
session.execute(query2);
session.execute(query3);
以下は、Java APIを使用してCassandraのテーブルにデータを挿入する完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Create_Data {
public static void main(String args[]){
//queries
String query1 = "INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal)"
+ " VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);" ;
String query2 = "INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal)"
+ " VALUES(2,'robin', 'Hyderabad', 9848022339, 40000);" ;
String query3 = "INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal)"
+ " VALUES(3,'rahman', 'Chennai', 9848022330, 45000);" ;
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query1);
session.execute(query2);
session.execute(query3);
System.out.println("Data created");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Create_Data.java
$java Create_Data
通常の状態では、次の出力を生成する必要があります-
Data created
Cassandra-データの更新
テーブルのデータを更新する
*UPDATE* は、テーブル内のデータを更新するために使用されるコマンドです。 次のキーワードは、テーブル内のデータを更新するときに使用されます-
- Where -この句は、更新する行を選択するために使用されます。
- 設定-このキーワードを使用して値を設定します。
- 必須-主キーを構成するすべての列が含まれます。
行の更新中に、特定の行が使用できない場合、UPDATEは新しい行を作成します。 以下にUPDATEコマンドの構文があります-
UPDATE <tablename>
SET <column name> = <new value>
<column name> = <value>....
WHERE <condition>
例
*emp* という名前のテーブルがあると仮定します。 このテーブルは、特定の会社の従業員の詳細を格納し、次の詳細があります-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
ロビンのemp_cityをデリーに、彼の給与を50000に更新しましょう。 以下に、必要な更新を実行するクエリを示します。
cqlsh:finddevguides> UPDATE emp SET emp_city='Delhi',emp_sal=50000
WHERE emp_id=2;
検証
SELECTステートメントを使用して、データが更新されたかどうかを確認します。 SELECTステートメントを使用してempテーブルを検証すると、次の出力が生成されます。
cqlsh:finddevguides> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | Delhi | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | 45000
(3 rows)
ここで、テーブルデータが更新されたことを確認できます。
Java APIを使用したデータの更新
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを更新できます。 以下の手順に従って、Java APIを使用してテーブル内のデータを更新します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint("127.0.0.1");
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name”);
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、empテーブルを更新しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
String query = “ UPDATE emp SET emp_city='Delhi',emp_sal=50000
WHERE emp_id = 2;” ;
以下は、Java APIを使用してテーブル内のデータを更新するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Update_Data {
public static void main(String args[]){
//query
String query = " UPDATE emp SET emp_city='Delhi',emp_sal=50000"
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Data updated");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Update_Data.java
$java Update_Data
通常の状態では、次の出力を生成する必要があります-
Data updated
Cassandra-データの読み取り
Select句を使用したデータの読み取り
SELECT句は、Cassandraのテーブルからデータを読み取るために使用されます。 この句を使用すると、テーブル全体、単一の列、または特定のセルを読み取ることができます。 SELECT句の構文は次のとおりです。
SELECT FROM <tablename>
例
次の詳細を持つ emp という名前のキースペースにテーブルがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | null | 9848022339 | 50000 |
3 | rahman | Chennai | 9848022330 | 50000 |
4 | rajeev | Pune | 9848022331 | 30000 |
次の例は、SELECT句を使用してテーブル全体を読み取る方法を示しています。 ここでは、 emp というテーブルを読み込んでいます。
cqlsh:finddevguides> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | null | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | 50000
4 | Pune | rajeev | 9848022331 | 30000
(4 rows)
必要な列の読み取り
次の例は、テーブル内の特定の列を読み取る方法を示しています。
cqlsh:finddevguides> SELECT emp_name, emp_sal from emp;
emp_name | emp_sal
----------+---------
ram | 50000
robin | 50000
rajeev | 30000
rahman | 50000
(4 rows)
Where句
WHERE句を使用して、必要な列に制約を設定できます。 その構文は次のとおりです-
SELECT FROM <table name> WHERE <condition>;
注-WHERE句は、主キーの一部である列、またはそれらにセカンダリインデックスがある列でのみ使用できます。
次の例では、給与が50000の従業員の詳細を読み取ります。 まず、セカンダリインデックスを列emp_salに設定します。
cqlsh:finddevguides> CREATE INDEX ON emp(emp_sal);
cqlsh:finddevguides> SELECT * FROM emp WHERE emp_sal=50000;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | null | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | 50000
Java APIを使用したデータの読み取り
Sessionクラスのexecute()メソッドを使用して、テーブルからデータを読み取ることができます。 Java APIの助けを借りて、バッチステートメントを使用して複数のステートメントを実行するには、以下の手順に従います。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“Your keyspace name”);
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、 emp テーブルからデータを取得しています。 以下に示すように、クエリを文字列に保存し、セッションクラスのexecute()メソッドに渡します。
String query = ”SELECT 8 FROM emp”;
session.execute(query);
Sessionクラスのexecute()メソッドを使用してクエリを実行します。
ステップ4:ResultSetオブジェクトを取得する
選択クエリは結果を ResultSet オブジェクトの形式で返すため、以下に示すように結果を RESULTSET クラスのオブジェクトに保存します。
ResultSet result = session.execute( );
以下は、テーブルからデータを読み取るための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;
public class Read_Data {
public static void main(String args[])throws Exception{
//queries
String query = "SELECT * FROM emp";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("finddevguides");
//Getting the ResultSet
ResultSet result = session.execute(query);
System.out.println(result.all());
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Read_Data.java
$java Read_Data
通常の状態では、次の出力を生成する必要があります-
[Row[1, Hyderabad, ram, 9848022338, 50000], Row[2, Delhi, robin,
9848022339, 50000], Row[4, Pune, rajeev, 9848022331, 30000], Row[3,
Chennai, rahman, 9848022330, 50000]]
Cassandra-データの削除
テーブルからデータを削除する
コマンド DELETE を使用して、テーブルからデータを削除できます。 その構文は次のとおりです-
DELETE FROM <identifier> WHERE <condition>;
例
Cassandraに emp というテーブルがあり、次のデータがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
次のステートメントは、最後の行のemp_sal列を削除します-
cqlsh:finddevguides> DELETE emp_sal FROM emp WHERE emp_id=3;
検証
SELECTステートメントを使用して、データが削除されたかどうかを確認します。 SELECTを使用してempテーブルを検証すると、次の出力が生成されます-
cqlsh:finddevguides> select *from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | Delhi | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | null
(3 rows)
ラーマンの給与を削除したため、給与の代わりにヌル値が表示されます。
行全体を削除する
次のコマンドは、テーブルから行全体を削除します。
cqlsh:finddevguides> DELETE FROM emp WHERE emp_id=3;
検証
SELECTステートメントを使用して、データが削除されたかどうかを確認します。 SELECTを使用してempテーブルを検証すると、次の出力が生成されます-
cqlsh:finddevguides> select* from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | Delhi | robin | 9848022339 | 50000
(2 rows)
最後の行を削除したため、テーブルには2行しか残っていません。
Java APIを使用したデータの削除
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを削除できます。 以下の手順に従って、Java APIを使用してテーブルからデータを削除します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
*Cluster.Builder* オブジェクトの* addContactPoint()*メソッドを使用して、接点(ノードのIPアドレス)を追加します。 このメソッドは *Cluster.Builder* を返します。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
Session session = cluster.connect();
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ”);
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、* emp。という名前のテーブルからデータを削除しています。以下に示すように、クエリを文字列変数に保存し、 execute()*メソッドに渡す必要があります。
String query1 = ”DELETE FROM emp WHERE emp_id=3; ”;
session.execute(query);
Java APIを使用してCassandraのテーブルからデータを削除する完全なプログラムを以下に示します。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Delete_Data {
public static void main(String args[]){
//query
String query = "DELETE FROM emp WHERE emp_id=3;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Data deleted");
}
}
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
$javac Delete_Data.java
$java Delete_Data
通常の状態では、次の出力を生成する必要があります-
Data deleted
Cassandra-CQLデータタイプ
CQLは、コレクション型を含む豊富な組み込みデータ型セットを提供します。 これらのデータ型に加えて、ユーザーは独自のカスタムデータ型を作成することもできます。 次の表に、CQLで使用可能な組み込みデータ型のリストを示します。
Data Type | Constants | Description |
---|---|---|
ascii | strings | Represents ASCII character string |
bigint | bigint | Represents 64-bit signed long |
blob | blobs | Represents arbitrary bytes |
Boolean | booleans | Represents true or false |
counter | integers | Represents counter column |
decimal | integers, floats | Represents variable-precision decimal |
double | integers | Represents 64-bit IEEE-754 floating point |
float | integers, floats | Represents 32-bit IEEE-754 floating point |
inet | strings | Represents an IP address, IPv4 or IPv6 |
int | integers | Represents 32-bit signed int |
text | strings | Represents UTF8 encoded string |
timestamp | integers, strings | Represents a timestamp |
timeuuid | uuids | Represents type 1 UUID |
uuid | uuids | Represents type 1 or type 4 |
UUID | ||
varchar | strings | Represents uTF8 encoded string |
varint | integers | Represents arbitrary-precision integer |
コレクションの種類
Cassandra Query Languageは、コレクションのデータ型も提供します。 次の表に、CQLで使用可能なコレクションのリストを示します。
Collection | Description |
---|---|
list | A list is a collection of one or more ordered elements. |
map | A map is a collection of key-value pairs. |
set | A set is a collection of one or more elements. |
ユーザー定義のデータ型
Cqlshは、ユーザーに独自のデータ型を作成する機能を提供します。 以下は、ユーザー定義のデータ型を扱う際に使用されるコマンドです。
- CREATE TYPE -ユーザー定義のデータ型を作成します。
- ALTER TYPE -ユーザー定義のデータ型を変更します。
- DROP TYPE -ユーザー定義のデータ型を削除します。
- DESCRIBE TYPE -ユーザー定義のデータ型について説明します。
- DESCRIBE TYPES -ユーザー定義のデータ型について説明します。
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)
Cassandra-CQLユーザー定義データ型
CQLは、ユーザー定義のデータ型を作成および使用する機能を提供します。 複数のフィールドを処理するデータ型を作成できます。 この章では、ユーザー定義のデータ型を作成、変更、削除する方法について説明します。
ユーザー定義データ型の作成
コマンド CREATE TYPE は、ユーザー定義のデータ型を作成するために使用されます。 その構文は次のとおりです-
CREATE TYPE <keyspace name>. <data typename>
( variable1, variable2).
例
以下に、ユーザー定義のデータ型を作成する例を示します。 この例では、次の詳細を含む card_details データ型を作成しています。
Field | Field name | Data type |
---|---|---|
credit card no | num | int |
credit card pin | pin | int |
name on credit card | name | text |
cvv | cvv | int |
Contact details of card holder | phone | set |
cqlsh:finddevguides> CREATE TYPE card_details (
... num int,
... pin int,
... name text,
... cvv int,
... phone set<int>
... );
注意-ユーザー定義のデータ型に使用される名前は、予約されている型名と一致してはなりません。
検証
*DESCRIBE* コマンドを使用して、作成されたタイプが作成されたかどうかを確認します。
CREATE TYPE finddevguides.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>
);
ユーザー定義のデータ型の変更
*ALTER TYPE* -コマンドは、既存のデータ型を変更するために使用されます。 ALTERを使用すると、新しいフィールドを追加したり、既存のフィールドの名前を変更したりできます。
型にフィールドを追加する
次の構文を使用して、既存のユーザー定義データ型に新しいフィールドを追加します。
ALTER TYPE typename
ADD field_name field_type;
次のコードは、 Card_details データ型に新しいフィールドを追加します。 ここでは、emailという新しいフィールドを追加しています。
cqlsh:finddevguides> ALTER TYPE card_details ADD email text;
検証
*DESCRIBE* コマンドを使用して、新しいフィールドが追加されているかどうかを確認します。
cqlsh:finddevguides> describe type card_details;
CREATE TYPE finddevguides.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
);
型のフィールドの名前を変更する
次の構文を使用して、既存のユーザー定義データ型の名前を変更します。
ALTER TYPE typename
RENAME existing_name TO new_name;
次のコードは、型のフィールドの名前を変更します。 ここでは、フィールドメールの名前をメールに変更しています。
cqlsh:finddevguides> ALTER TYPE card_details RENAME email TO mail;
検証
*DESCRIBE* コマンドを使用して、タイプ名が変更されたかどうかを確認します。
cqlsh:finddevguides> describe type card_details;
CREATE TYPE finddevguides.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
mail text
);
ユーザー定義データ型の削除
*DROP TYPE* は、ユーザー定義のデータ型を削除するために使用されるコマンドです。 以下は、ユーザー定義のデータ型を削除する例です。
例
削除する前に、以下に示すように DESCRIBE_TYPES コマンドを使用して、すべてのユーザー定義データ型のリストを確認します。
cqlsh:finddevguides> DESCRIBE TYPES;
card_details card
2つのタイプから、以下に示すように card という名前のタイプを削除します。
cqlsh:finddevguides> drop type card;
*DESCRIBE* コマンドを使用して、データ型が削除されたかどうかを確認します。
cqlsh:finddevguides> describe types;
card_details
Cassandra-便利なリソース
以下のリソースには、Cassandraに関する追加情報が含まれています。 このトピックに関する詳細な知識を得るためにそれらを使用してください。
Cassandraの便利なリンク
- Cassandra-Cassandraの公式サイト。
- Cassandra Wikipedia-CassandraのWikipediaリファレンス
Cassandraに関する有用な本
このページにサイトを登録するには、 contact @ finddevguides.com にメールを送信してください。