カサンドラ-クイックガイド
Apache Cassandraは、多くの商用サーバー間で大量のデータを処理するように設計された、拡張性が高く高性能な分散データベースであり、単一障害点のない高可用性を提供します。これはNoSQLデータベースの一種です。まず、NoSQLデータベースの機能を理解しましょう。
NoSQLDatabase
NoSQLデータベース(SQLだけでなく呼ばれることもあります)は、リレーショナルデータベースで使用される表形式の関係以外のデータを格納および取得するメカニズムを提供するデータベースです。これらのデータベースはスキーマフリーで、簡単なレプリケーションをサポートし、シンプルなAPIを備え、結果整合性があり、大量のデータを処理できます。
NoSQLデータベースの主な目的は
- デザインのシンプルさ、
- 水平スケーリング、および
- 可用性のより細かい制御。
NoSqlデータベースは、リレーショナルデータベースとは異なるデータ構造を使用します。これにより、NoSQLでの一部の操作が高速になります。特定のNoSQLデータベースの適合性は、解決する必要のある問題によって異なります。
NoSQLとリレーショナルデータベース
次の表に、リレーショナルデータベースとNoSQLデータベースを区別するポイントを示します。
リレーショナルデータベース | NoSqlデータベース |
---|---|
強力なクエリ言語をサポートします。 | 非常に単純なクエリ言語をサポートします。 |
スキーマは固定されています。 | 固定スキーマはありません。 |
ACID(原子性、一貫性、分離、および耐久性)に従います。 | これは「結果整合性」のみです。 |
トランザクションをサポートします。 | トランザクションをサポートしていません。 |
Cassandraの他に、非常に人気のある次のNoSQLデータベースがあります-
Apache HBase− HBaseは、GoogleのBigTableをモデルにしたオープンソースの非リレーショナル分散データベースであり、Javaで記述されています。これはApacheHadoopプロジェクトの一部として開発され、HDFS上で実行され、HadoopにBigTableのような機能を提供します。
MongoDB − MongoDBは、クロスプラットフォームのドキュメント指向データベースシステムであり、従来のテーブルベースのリレーショナルデータベース構造の使用を回避し、動的スキーマを備えたJSONのようなドキュメントを使用して、特定のタイプのアプリケーションでのデータの統合をより簡単かつ迅速にします。
Apache Cassandraとは何ですか?
Apache Cassandraは、世界中に分散している非常に大量の構造化データを管理するための、オープンソースの分散型および分散型/分散型ストレージシステム(データベース)です。単一障害点のない高可用性サービスを提供します。
以下にリストされているのは、ApacheCassandraの注目すべき点のいくつかです。
スケーラブルで、フォールトトレラントで、一貫性があります。
これは列指向のデータベースです。
その配布設計は、AmazonのDynamoとGoogleのBigtableのデータモデルに基づいています。
Facebookで作成されたもので、リレーショナルデータベース管理システムとは大きく異なります。
Cassandraは、単一障害点のないDynamoスタイルのレプリケーションモデルを実装しますが、より強力な「列ファミリー」データモデルを追加します。
Cassandraは、Facebook、Twitter、Cisco、Rackspace、ebay、Twitter、Netflixなどの大手企業で使用されています。
Cassandraの機能
Cassandraは、その卓越した技術的機能により非常に人気があります。以下に、Cassandraの機能の一部を示します。
Elastic scalability−Cassandraは非常にスケーラブルです。要件に応じて、より多くの顧客とより多くのデータに対応するために、より多くのハードウェアを追加できます。
Always on architecture − Cassandraには単一障害点がなく、障害を発生させることができないビジネスクリティカルなアプリケーションで継続的に利用できます。
Fast linear-scale performance− Cassandraは線形にスケーラブルです。つまり、クラスター内のノード数を増やすとスループットが向上します。したがって、迅速な応答時間を維持します。
Flexible data storage− Cassandraは、構造化、半構造化、非構造化を含むすべての可能なデータ形式に対応します。必要に応じて、データ構造の変更に動的に対応できます。
Easy data distribution − Cassandraは、複数のデータセンターにデータを複製することにより、必要な場所にデータを分散する柔軟性を提供します。
Transaction support − Cassandraは、原子性、一貫性、分離、および耐久性(ACID)などのプロパティをサポートします。
Fast writes− Cassandraは、安価なコモディティハードウェアで実行するように設計されています。非常に高速な書き込みを実行し、読み取り効率を犠牲にすることなく、数百テラバイトのデータを保存できます。
カサンドラの歴史
- Cassandraは、受信トレイ検索用にFacebookで開発されました。
- 2008年7月にFacebookによってオープンソース化されました。
- Cassandraは2009年3月にApacheIncubatorに受け入れられました。
- 2010年2月からApacheのトップレベルプロジェクトになりました。
Cassandraの設計目標は、単一障害点なしで複数のノードにわたるビッグデータワークロードを処理することです。Cassandraは、ノード全体にピアツーピア分散システムを備えており、データはクラスター内のすべてのノードに分散されます。
クラスター内のすべてのノードは同じ役割を果たします。各ノードは独立しており、同時に他のノードに相互接続されています。
クラスタ内の各ノードは、データが実際にクラスタ内のどこにあるかに関係なく、読み取りおよび書き込み要求を受け入れることができます。
ノードがダウンすると、ネットワーク内の他のノードから読み取り/書き込み要求を処理できます。
Cassandraでのデータレプリケーション
Cassandraでは、クラスター内の1つ以上のノードが特定のデータのレプリカとして機能します。一部のノードが古い値で応答したことが検出された場合、Cassandraは最新の値をクライアントに返します。最新の値を返した後、Cassandraはread repair バックグラウンドで古い値を更新します。
次の図は、Cassandraがクラスター内のノード間でデータレプリケーションを使用して単一障害点がないことを確認する方法の概略図を示しています。
Note −Cassandraは Gossip Protocol バックグラウンドでノードが相互に通信し、クラスター内の障害のあるノードを検出できるようにします。
Cassandraのコンポーネント
カサンドラの主要コンポーネントは次のとおりです-
Node −データが保存される場所です。
Data center −関連するノードのコレクションです。
Cluster −クラスターは、1つ以上のデータセンターを含むコンポーネントです。
Commit log−コミットログは、Cassandraのクラッシュリカバリメカニズムです。すべての書き込み操作は、コミットログに書き込まれます。
Mem-table− mem-tableは、メモリに常駐するデータ構造です。コミットログの後、データはmem-tableに書き込まれます。単一列のファミリの場合、複数のメモリテーブルが存在する場合があります。
SSTable −内容がしきい値に達したときに、データがメモリテーブルからフラッシュされるディスクファイルです。
Bloom filter−これらは、要素がセットのメンバーであるかどうかをテストするための、迅速で非決定的なアルゴリズムに他なりません。これは特別な種類のキャッシュです。ブルームフィルターは、すべてのクエリの後にアクセスされます。
Cassandraクエリ言語
ユーザーは、Cassandra Query Language(CQL)を使用して、ノードを介してCassandraにアクセスできます。CQLはデータベースを扱います(Keyspace)テーブルのコンテナとして。プログラマーはcqlsh: CQLまたは個別のアプリケーション言語ドライバーを操作するためのプロンプト。
クライアントは、読み取り/書き込み操作のために任意のノードにアプローチします。そのノード(コーディネーター)は、クライアントとデータを保持しているノードの間でプロキシを再生します。
書き込み操作
ノードのすべての書き込みアクティビティは、 commit logsノードに書き込まれます。後でデータがキャプチャされ、に保存されますmem-table. mem-tableがいっぱいになると、データがに書き込まれます。 SStableデータファイル。すべての書き込みは自動的に分割され、クラスター全体に複製されます。Cassandraは定期的にSSTableを統合し、不要なデータを破棄します。
読み取り操作
読み取り操作中に、Cassandraはmem-tableから値を取得し、ブルームフィルターをチェックして、必要なデータを保持する適切なSSTableを見つけます。
Cassandraのデータモデルは、RDBMSで通常見られるものとは大きく異なります。この章では、Cassandraがデータを保存する方法の概要を説明します。
集まる
Cassandraデータベースは、一緒に動作する複数のマシンに分散されています。最も外側のコンテナはクラスターと呼ばれます。障害処理の場合、すべてのノードにレプリカが含まれ、障害が発生した場合はレプリカが担当します。Cassandraは、ノードをリング形式でクラスターに配置し、それらにデータを割り当てます。
キースペース
キースペースは、Cassandraのデータの最も外側のコンテナーです。Cassandraのキースペースの基本的な属性は次のとおりです。
Replication factor −同じデータのコピーを受信するクラスター内のマシンの数です。
Replica placement strategy−レプリカをリングに配置する戦略に他なりません。次のような戦略がありますsimple strategy (ラック対応戦略)、 old network topology strategy (ラック対応戦略)、および network topology strategy (データセンター共有戦略)。
Column families−キースペースは、1つ以上の列ファミリーのリストのコンテナーです。次に、列ファミリーは行のコレクションのコンテナーです。各行には順序付けられた列が含まれています。列ファミリーは、データの構造を表します。各キースペースには、少なくとも1つ、多くの場合多くの列ファミリーがあります。
キースペースを作成する構文は次のとおりです-
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
次の図は、キースペースの概略図を示しています。
カラムファミリー
列ファミリーは、順序付けられた行のコレクションのコンテナーです。各行は、順番に並べられた列のコレクションです。次の表に、列ファミリとリレーショナルデータベースの表を区別するポイントを示します。
リレーショナルテーブル | Cassandra列ファミリー |
---|---|
リレーショナルモデルのスキーマが修正されました。テーブルに特定の列を定義したら、データを挿入するときに、すべての行ですべての列に少なくともnull値を入力する必要があります。 | Cassandraでは、列ファミリーは定義されていますが、列は定義されていません。任意の列を任意の列ファミリーにいつでも自由に追加できます。 |
リレーショナルテーブルは列のみを定義し、ユーザーはテーブルに値を入力します。 | Cassandraでは、テーブルに列が含まれているか、スーパー列ファミリーとして定義できます。 |
Cassandra列ファミリーには次の属性があります-
keys_cached −SSTableごとにキャッシュしておく場所の数を表します。
rows_cached −コンテンツ全体がメモリにキャッシュされる行数を表します。
preload_row_cache −行キャッシュに事前入力するかどうかを指定します。
Note − 列ファミリーのスキーマが固定されていないリレーショナルテーブルとは異なり、Cassandraは個々の行にすべての列を強制しません。
次の図は、Cassandra列ファミリーの例を示しています。
カラム
列は、Cassandraの基本的なデータ構造であり、キーまたは列の名前、値、およびタイムスタンプの3つの値があります。以下に、列の構造を示します。
SuperColumn
スーパー列は特別な列であるため、キーと値のペアでもあります。ただし、スーパー列にはサブ列のマップが格納されます。
通常、列ファミリはディスクの個別のファイルに保存されます。したがって、パフォーマンスを最適化するには、クエリを実行する可能性のある列を同じ列ファミリーに保持することが重要であり、ここではスーパー列が役立ちます。以下にスーパー列の構造を示します。
CassandraとRDBMSのデータモデル
次の表に、CassandraのデータモデルとRDBMSのデータモデルを区別するポイントを示します。
RDBMS | カサンドラ |
---|---|
RDBMSは構造化データを扱います。 | Cassandraは非構造化データを扱います。 |
スキーマは固定されています。 | Cassandraには柔軟なスキーマがあります。 |
RDBMSでは、テーブルは配列の配列です。(行x列) | Cassandraでは、テーブルは「ネストされたキーと値のペア」のリストです。(ROW xCOLUMNキーxCOLUMN値) |
データベースは、アプリケーションに対応するデータを含む最も外側のコンテナです。 | キースペースは、アプリケーションに対応するデータを含む最も外側のコンテナです。 |
テーブルはデータベースのエンティティです。 | テーブルまたは列ファミリーは、キースペースのエンティティです。 |
行はRDBMSの個々のレコードです。 | 行は、Cassandraのレプリケーションの単位です。 |
列は、リレーションの属性を表します。 | Columnは、Cassandraのストレージの単位です。 |
RDBMSは、外部キー、結合の概念をサポートしています。 | 関係は、コレクションを使用して表されます。 |
Cassandraには、cqlshおよびさまざまな言語のドライバーを使用してアクセスできます。この章では、Cassandraと連携するようにcqlsh環境とjava環境の両方をセットアップする方法について説明します。
インストール前のセットアップ
Linux環境にCassandraをインストールする前に、を使用してLinuxをセットアップする必要があります。 ssh(セキュアシェル)。Linux環境をセットアップするには、以下の手順に従ってください。
ユーザーを作成する
最初に、HadoopファイルシステムをUnixファイルシステムから分離するために、Hadoop用に別のユーザーを作成することをお勧めします。以下の手順に従って、ユーザーを作成します。
コマンドを使用してrootを開きます “su”。
コマンドを使用してrootアカウントからユーザーを作成します “useradd username”。
これで、コマンドを使用して既存のユーザーアカウントを開くことができます “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
次のリンクからjava(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。
Then jdk-7u71-linux-x64.tar.gz will be downloaded onto your system.
ステップ2
通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、抽出します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 /」の場所に移動する必要があります。rootを開き、次のコマンドを入力します。
$ 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 上で説明したように端末からのコマンド。
パスの設定
以下に示すように、「/。bashrc」にCassandraパスのパスを設定します。
[hadoop@linux ~]$ gedit ~/.bashrc
export CASSANDRA_HOME = ~/cassandra
export PATH = $PATH:$CASSANDRA_HOME/bin
Cassandraをダウンロードする
Apache Cassandraは、ダウンロードリンクCassandraで次のコマンドを使用して入手できます。
$ wget http://supergsego.com/apache/cassandra/2.1.2/apache-cassandra-2.1.2-bin.tar.gz
コマンドを使用してCassandraを解凍します zxvf 以下に示すように。
$ tar zxvf apache-cassandra-2.1.2-bin.tar.gz.
以下に示すように、cassandraという名前の新しいディレクトリを作成し、ダウンロードしたファイルの内容をそのディレクトリに移動します。
$ mkdir Cassandra $ mv apache-cassandra-2.1.2/* cassandra.
Cassandraを構成する
を開きます cassandra.yaml: ファイル、で利用可能になります bin カサンドラのディレクトリ。
$ gedit cassandra.yaml
Note − debまたはrpmパッケージから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”
以下に示すように、これらのディレクトリが存在し、書き込み可能であることを確認してください。
ディレクトリを作成する
スーパーユーザーとして、2つのディレクトリを作成します /var/lib/cassandra そして /var./log/cassandra Cassandraがデータを書き込む場所。
[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という新しいプロジェクトを作成します。
プロジェクトを右クリックして、 Build Path→Configure Build Path 以下に示すように。
プロパティウィンドウが開きます。[ライブラリ]タブで、[Add External JARs。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のすべての重要なクラスについて説明します。
集まる
このクラスは、ドライバーの主要なエントリポイントです。所属するcom.datastax.driver.core パッケージ。
メソッド
S.いいえ。 | メソッドと説明 |
---|---|
1 | Session connect() 現在のクラスター上に新しいセッションを作成し、初期化します。 |
2 | void close() クラスターインスタンスを閉じるために使用されます。 |
3 | static Cluster.Builder builder() これは、新しいCluster.Builderインスタンスを作成するために使用されます。 |
Cluster.Builder
このクラスは、インスタンス化するために使用されます Cluster.Builder クラス。
メソッド
S.いいえ | メソッドと説明 |
---|---|
1 | Cluster.Builder addContactPoint(String address) このメソッドは、クラスターに接点を追加します。 |
2 | Cluster build() このメソッドは、指定されたコンタクトポイントでクラスターを構築します。 |
セッション
このインターフェースは、Cassandraクラスターへの接続を保持します。このインターフェースを使用して、実行できますCQLクエリ。所属するcom.datastax.driver.core パッケージ。
メソッド
S.いいえ。 | メソッドと説明 |
---|---|
1 | void close() このメソッドは、現在のセッションインスタンスを閉じるために使用されます。 |
2 | ResultSet execute(Statement statement) このメソッドは、クエリを実行するために使用されます。ステートメントオブジェクトが必要です。 |
3 | ResultSet execute(String query) このメソッドは、クエリを実行するために使用されます。Stringオブジェクトの形式のクエリが必要です。 |
4 | PreparedStatement prepare(RegularStatement statement) このメソッドは、提供されたクエリを準備します。クエリはステートメントの形式で提供されます。 |
5 | PreparedStatement prepare(String query) このメソッドは、提供されたクエリを準備します。クエリは文字列の形式で提供されます。 |
この章では、Cassandraクエリ言語シェルを紹介し、そのコマンドの使用方法について説明します。
デフォルトでは、CassandraはプロンプトCassandraクエリ言語シェルを提供します (cqlsh)それはユーザーがそれと通信することを可能にします。このシェルを使用して、実行できますCassandra Query Language (CQL)。
cqlshを使用すると、次のことができます。
- スキーマを定義し、
- データを挿入し、
- クエリを実行します。
cqlshを開始しています
コマンドを使用してcqlshを開始します cqlsh以下に示すように。Cassandracqlshプロンプトを出力として提供します。
[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 とその使用法。
オプション | 使用法 |
---|---|
cqlsh --help | のオプションに関するヘルプトピックを表示します cqlsh コマンド。 |
cqlsh --version | 使用しているcqlshのバージョンを提供します。 |
cqlsh --color | 色付きの出力を使用するようにシェルに指示します。 |
cqlsh --debug | 追加のデバッグ情報を表示します。 |
cqlsh --execute cql_statement |
CQLコマンドを受け入れて実行するようにシェルに指示します。 |
cqlsh --file = “file name” | このオプションを使用すると、Cassandraは指定されたファイルでコマンドを実行して終了します。 |
cqlsh --no-color | 色付きの出力を使用しないようにCassandraに指示します。 |
cqlsh -u “user name” | このオプションを使用すると、ユーザーを認証できます。デフォルトのユーザー名はcassandraです。 |
cqlsh-p “pass word” | このオプションを使用すると、パスワードを使用してユーザーを認証できます。デフォルトのパスワードはcassandraです。 |
Cqlshコマンド
Cqlshには、ユーザーがCqlshを操作できるようにするコマンドがいくつかあります。コマンドは以下のとおりです。
文書化されたシェルコマンド
以下に、Cqlshで文書化されたシェルコマンドを示します。これらは、ヘルプトピックの表示、cqlshの終了、describeなどのタスクを実行するために使用されるコマンドです。
HELP −すべてのcqlshコマンドのヘルプトピックを表示します。
CAPTURE −コマンドの出力をキャプチャし、ファイルに追加します。
CONSISTENCY −現在の整合性レベルを表示するか、新しい整合性レベルを設定します。
COPY −Cassandraとの間でデータをコピーします。
DESCRIBE −Cassandraとそのオブジェクトの現在のクラスターについて説明します。
EXPAND −クエリの出力を垂直方向に展開します。
EXIT −このコマンドを使用して、cqlshを終了できます。
PAGING −クエリページングを有効または無効にします。
SHOW − Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。
SOURCE −CQLステートメントを含むファイルを実行します。
TRACING −リクエストトレースを有効または無効にします。
CQLデータ定義コマンド
CREATE KEYSPACE −CassandraにKeySpaceを作成します。
USE −作成されたKeySpaceに接続します。
ALTER KEYSPACE −KeySpaceのプロパティを変更します。
DROP KEYSPACE −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は、CQLコマンドに加えて、文書化されたシェルコマンドを提供します。以下に、Cassandraで文書化されたシェルコマンドを示します。
助けて
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:tutorialspoint> select * from emp;
次のコマンドを使用して、キャプチャをオフにできます。
cqlsh:tutorialspoint> capture off;
一貫性
このコマンドは、現在の整合性レベルを表示するか、新しい整合性レベルを設定します。
cqlsh:tutorialspoint> CONSISTENCY
Current consistency level is 1.
コピー
このコマンドは、Cassandraとの間でデータをファイルにコピーします。以下に示すのは、という名前のテーブルをコピーする例です。emp ファイルに myfile。
cqlsh:tutorialspoint> COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;
4 rows exported in 0.034 seconds.
与えられたファイルを開いて確認すると、以下に示すようにコピーされたデータを見つけることができます。
説明する
このコマンドは、Cassandraの現在のクラスターとそのオブジェクトを記述します。このコマンドのバリエーションを以下に説明します。
Describe cluster −このコマンドは、クラスターに関する情報を提供します。
cqlsh:tutorialspoint> describe cluster;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner
Range ownership:
-658380912249644557 [127.0.0.1]
-2833890865268921414 [127.0.0.1]
-6792159006375935836 [127.0.0.1]
Describe Keyspaces−このコマンドは、クラスター内のすべてのキースペースをリストします。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> describe keyspaces;
system_traces system tp tutorialspoint
Describe tables−このコマンドは、キースペース内のすべてのテーブルを一覧表示します。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> describe tables;
emp
Describe table−このコマンドは、テーブルの説明を提供します。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> describe table emp;
CREATE TABLE tutorialspoint.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 tutorialspoint.emp (emp_sal);
タイプの説明
このコマンドは、ユーザー定義のデータ型を記述するために使用されます。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> describe type card_details;
CREATE TYPE tutorialspoint.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
mail text
);
タイプを説明する
このコマンドは、すべてのユーザー定義データ型を一覧表示します。以下に、このコマンドの使用法を示します。2つのユーザー定義データ型があると仮定します。card そして card_details。
cqlsh:tutorialspoint> DESCRIBE TYPES;
card_details card
展開
このコマンドは、出力を展開するために使用されます。このコマンドを使用する前に、expandコマンドをオンにする必要があります。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> expand on;
cqlsh:tutorialspoint> 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)
Note −次のコマンドを使用して、展開オプションをオフにできます。
cqlsh:tutorialspoint> expand off;
Disabled Expanded output.
出口
このコマンドは、cqlシェルを終了するために使用されます。
公演
このコマンドは、Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。以下に、このコマンドの使用法を示します。
cqlsh:tutorialspoint> show host;
Connected to Test Cluster at 127.0.0.1:9042.
cqlsh:tutorialspoint> show version;
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
ソース
このコマンドを使用すると、ファイル内のコマンドを実行できます。入力ファイルが次のようになっているとします-
次に、以下に示すように、コマンドを含むファイルを実行できます。
cqlsh:tutorialspoint> 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)
Cqlshを使用したキースペースの作成
Cassandraのキースペースは、ノードでのデータレプリケーションを定義する名前空間です。クラスターには、ノードごとに1つのキースペースが含まれます。以下に、ステートメントを使用してキースペースを作成するための構文を示します。CREATE KEYSPACE。
構文
CREATE KEYSPACE <identifier> WITH <properties>
すなわち
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’;
CREATEKEYSPACEステートメントには2つのプロパティがあります。 replication そして durable_writes。
レプリケーション
レプリケーションオプションは、 Replica Placement strategy必要なレプリカの数。次の表に、すべてのレプリカ配置戦略を示します。
戦略名 | 説明 |
---|---|
Simple Strategy' | クラスターの単純なレプリケーション係数を指定します。 |
Network Topology Strategy | このオプションを使用すると、各データセンターのレプリケーション係数を個別に設定できます。 |
Old Network Topology Strategy | これはレガシーレプリケーション戦略です。 |
このオプションを使用すると、Cassandraに使用するかどうかを指示できます commitlog現在のKeySpaceの更新について。このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下に、KeySpaceの作成例を示します。
ここでは、という名前のKeySpaceを作成しています TutorialsPoint。
最初のレプリカ配置戦略を使用しています。 Simple Strategy。
そして、レプリケーションファクターを選択しています 1 replica。
cqlsh.> CREATE KEYSPACE tutorialspoint
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
検証
コマンドを使用して、テーブルが作成されているかどうかを確認できます Describe。キースペースに対してこのコマンドを使用すると、以下に示すように作成されたすべてのキースペースが表示されます。
cqlsh> DESCRIBE keyspaces;
tutorialspoint system system_traces
ここでは、新しく作成されたKeySpaceを観察できます tutorialspoint.
Durable_writes
デフォルトでは、テーブルの耐久性のある_writesプロパティはに設定されています true,ただし、falseに設定できます。このプロパティをに設定することはできませんsimplex strategy.
例
以下に示すのは、永続書き込みプロパティの使用法を示す例です。
cqlsh> CREATE KEYSPACE test
... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 }
... AND DURABLE_WRITES = false;
検証
システムキースペースにクエリを実行すると、テストKeySpaceのresundable_writesプロパティがfalseに設定されているかどうかを確認できます。このクエリは、すべてのKeySpaceとそのプロパティを提供します。
cqlsh> SELECT * FROM system_schema.keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"}
tutorialspoint | 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のresundable_writesプロパティがfalseに設定されていることを確認できます。
キースペースの使用
キーワードを使用して作成されたKeySpaceを使用できます USE。その構文は次のとおりです-
Syntax:USE <identifier>
例
次の例では、KeySpaceを使用しています tutorialspoint.
cqlsh> USE tutorialspoint;
cqlsh:tutorialspoint>
JavaAPIを使用したキースペースの作成
キースペースは、を使用して作成できます。 execute() の方法 Sessionクラス。以下の手順に従って、JavaAPIを使用してキースペースを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードでクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
のインスタンスを作成します Session を使用するオブジェクト connect() の方法 Cluster 以下に示すクラス。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のキースペース名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ステップ3:クエリを実行する
実行できます CQL を使用したクエリ execute() の方法 Sessionクラス。文字列形式またはとしてクエリを渡しますStatement クラスオブジェクト execute()方法。文字列形式でこのメソッドに渡すものはすべて、で実行されます。cqlsh。
この例では、次の名前のKeySpaceを作成しています tp. 最初のレプリカ配置戦略、つまりシンプル戦略を使用しており、1つのレプリカに対するレプリケーション係数を選択しています。
以下に示すように、クエリを文字列変数に格納し、execute()メソッドに渡す必要があります。
String query = "CREATE KEYSPACE tp WITH replication "
+ "= {'class':'SimpleStrategy', 'replication_factor':1}; ";
session.execute(query);
ステップ4:KeySpaceを使用する
以下に示すように、execute()メソッドを使用して作成されたKeySpaceを使用できます。
execute(“ USE tp ” );
以下に示すのは、JavaAPIを使用して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
KeySpaceの変更
ALTER KEYSPACEを使用して、レプリカの数やKeySpaceのresundable_writesなどのプロパティを変更できます。このコマンドの構文は次のとおりです。
構文
ALTER KEYSPACE <identifier> WITH <properties>
すなわち
ALTER KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
のプロパティ ALTER KEYSPACECREATEKEYSPACEと同じです。これには2つのプロパティがあります。replication そして durable_writes。
レプリケーション
レプリケーションオプションは、レプリカの配置戦略と必要なレプリカの数を指定します。
Durable_writes
このオプションを使用すると、現在のKeySpaceの更新にcommitlogを使用するかどうかをCassandraに指示できます。このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下に、KeySpaceを変更する例を示します。
ここでは、名前付きのKeySpaceを変更しています TutorialsPoint。
レプリケーション係数を1から3に変更します。
cqlsh.> ALTER KEYSPACE tutorialspoint
WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};
Durable_writesの変更
KeySpaceのresundable_writesプロパティを変更することもできます。以下に示すのは、の耐久性のある書き込みプロパティです。test KeySpace。
SELECT * FROM system_schema.keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
tutorialspoint | 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"}
tutorialspoint | 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)
JavaAPIを使用したキースペースの変更
キースペースは、 execute() の方法 Sessionクラス。Java APIを使用してキースペースを変更するには、以下の手順に従ってください
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
のインスタンスを作成します Session を使用するオブジェクト connect() の方法 Cluster以下に示すクラス。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のキースペース名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。文字列形式またはとしてクエリを渡しますStatementexecute()メソッドのクラスオブジェクト。文字列形式でこのメソッドに渡すものはすべて、で実行されます。cqlsh。
この例では、
名前の付いたキースペースを変更しています tp。レプリケーションオプションをシンプル戦略からネットワークトポロジ戦略に変更しています。
私たちは変更しています durable_writes 偽に
以下に示すように、クエリを文字列変数に格納し、execute()メソッドに渡す必要があります。
//Query
String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = false;";
session.execute(query);
以下に示すのは、JavaAPIを使用して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
キースペースを削除する
コマンドを使用してKeySpaceをドロップできます DROP KEYSPACE。以下に、KeySpaceを削除するための構文を示します。
構文
DROP KEYSPACE <identifier>
すなわち
DROP KEYSPACE “KeySpace name”
例
次のコードはキースペースを削除します tutorialspoint。
cqlsh> DROP KEYSPACE tutorialspoint;
検証
コマンドを使用してキースペースを確認します Describe 以下に示すように、テーブルがドロップされているかどうかを確認します。
cqlsh> DESCRIBE keyspaces;
system system_traces
キースペースtutorialspointを削除したため、キースペースリストには表示されません。
JavaAPIを使用したキースペースの削除
Sessionクラスのexecute()メソッドを使用してキースペースを作成できます。以下の手順に従って、JavaAPIを使用してキースペースを削除します。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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);
以下に示すのは、JavaAPIを使用して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
テーブルの作成
コマンドを使用してテーブルを作成できます 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でテーブルを作成する例を示します。ここにあります-
キースペースチュートリアルポイントの使用
名前の付いたテーブルを作成する emp
従業員の名前、ID、都市、給与、電話番号などの詳細が含まれます。従業員IDが主キーです。
cqlsh> USE tutorialspoint;
cqlsh:tutorialspoint>; CREATE TABLE emp(
emp_id int PRIMARY KEY,
emp_name text,
emp_city text,
emp_sal varint,
emp_phone varint
);
検証
selectステートメントはスキーマを提供します。以下に示すように、selectステートメントを使用してテーブルを確認します。
cqlsh:tutorialspoint> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+----------+----------+-----------+---------
(0 rows)
ここでは、特定の列で作成されたテーブルを確認できます。キースペースtutorialspointを削除したため、キースペースリストには表示されません。
JavaAPIを使用したテーブルの作成
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。以下の手順に従って、JavaAPIを使用してテーブルを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
を使用してSessionオブジェクトのインスタンスを作成します connect() の方法 Cluster 以下に示すクラス。
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);
以下に示すのは、JavaAPIを使用して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
テーブルの変更
コマンドを使用してテーブルを変更できます ALTER TABLE。以下に、テーブルを作成するための構文を示します。
構文
ALTER (TABLE | COLUMNFAMILY) <tablename> <instruction>
ALTERコマンドを使用すると、次の操作を実行できます-
列を追加する
列をドロップします
列の追加
ALTERコマンドを使用して、テーブルに列を追加できます。列を追加するときは、列名が既存の列名と競合しないこと、およびテーブルがコンパクトストレージオプションで定義されていないことに注意する必要があります。以下に、テーブルに列を追加するための構文を示します。
ALTER TABLE table name
ADD new column datatype;
Example
以下に、既存のテーブルに列を追加する例を示します。ここでは、という列を追加していますemp_email 名前の付いたテーブルへのテキストデータ型の emp。
cqlsh:tutorialspoint> ALTER TABLE emp
... ADD emp_email text;
Verification
SELECTステートメントを使用して、列が追加されているかどうかを確認します。ここでは、新しく追加された列emp_emailを確認できます。
cqlsh:tutorialspoint> select * from emp;
emp_id | emp_city | emp_email | emp_name | emp_phone | emp_sal
--------+----------+-----------+----------+-----------+---------
列を削除する
ALTERコマンドを使用して、テーブルから列を削除できます。テーブルから列を削除する前に、テーブルがコンパクトストレージオプションで定義されていないことを確認してください。以下に、ALTERコマンドを使用してテーブルから列を削除するための構文を示します。
ALTER table name
DROP column name;
Example
以下に示すのは、テーブルから列を削除する例です。ここでは、という名前の列を削除していますemp_email。
cqlsh:tutorialspoint> ALTER TABLE emp DROP emp_email;
Verification
を使用して列が削除されているかどうかを確認します select 以下に示すように、ステートメント。
cqlsh:tutorialspoint> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+----------+----------+-----------+---------
(0 rows)
以来 emp_email 列が削除されました。もう見つかりません。
JavaAPIを使用したテーブルの変更
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。Java APIを使用してテーブルを変更するには、以下の手順に従います。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
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
テーブルを落とす
コマンドを使用してテーブルを削除できます Drop Table。その構文は次のとおりです-
構文
DROP TABLE <tablename>
例
次のコードは、KeySpaceから既存のテーブルを削除します。
cqlsh:tutorialspoint> DROP TABLE emp;
検証
説明コマンドを使用して、テーブルが削除されているかどうかを確認します。empテーブルが削除されたため、列ファミリーリストに表示されません。
cqlsh:tutorialspoint> DESCRIBE COLUMNFAMILIES;
employee
JavaAPIを使用したテーブルの削除
Sessionクラスのexecute()メソッドを使用してテーブルを削除できます。Java APIを使用してテーブルを削除するには、以下の手順に従ってください。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ-
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
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);
以下に示すのは、JavaAPIを使用して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
テーブルの切り捨て
TRUNCATEコマンドを使用してテーブルを切り捨てることができます。テーブルを切り捨てると、テーブルのすべての行が完全に削除されます。このコマンドの構文は次のとおりです。
構文
TRUNCATE <tablename>
例
と呼ばれるテーブルがあるとしましょう student 以下のデータで。
s_id | s_name | s_branch | s_aggregate |
---|---|---|---|
1 | 羊 | それ | 70 |
2 | ラーマン | EEE | 75 |
3 | ロビン | メカ | 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)
JavaAPIを使用したテーブルの切り捨て
Sessionクラスのexecute()メソッドを使用してテーブルを切り捨てることができます。以下の手順に従って、テーブルを切り捨てます。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
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);
以下に示すのは、JavaAPIを使用して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
Cqlshを使用したインデックスの作成
コマンドを使用して、Cassandraでインデックスを作成できます CREATE INDEX. その構文は次のとおりです-
CREATE INDEX <identifier> ON <tablename>
以下に、列へのインデックスを作成する例を示します。ここでは、empという名前のテーブルの列 'emp_name'へのインデックスを作成しています。
cqlsh:tutorialspoint> CREATE INDEX name ON emp1 (emp_name);
JavaAPIを使用したインデックスの作成
Sessionクラスのexecute()メソッドを使用して、テーブルの列へのインデックスを作成できます。以下の手順に従って、テーブルの列へのインデックスを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//Building a cluster
Cluster cluster = builder.build();
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
ステップ2:セッションオブジェクトを作成する
のconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。 Cluster 以下に示すクラス。
Session session = cluster.connect( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ここでは、KeySpaceと呼ばれるものを使用しています tp. したがって、以下に示すようにセッションオブジェクトを作成します。
Session session = cluster.connect(“ tp” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。クエリを文字列形式またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。文字列形式でこのメソッドに渡すものはすべて、で実行されます。cqlsh。
次の例では、次の名前のテーブルにemp_nameという名前の列へのインデックスを作成しています。 emp. 以下に示すように、クエリを文字列変数に格納し、execute()メソッドに渡す必要があります。
//Query
String query = "CREATE INDEX name ON emp1 (emp_name);";
session.execute(query);
以下に示すのは、JavaAPIを使用してCassandraのテーブルに列のインデックスを作成するための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Create_Index {
public static void main(String args[]){
//Query
String query = "CREATE INDEX name ON emp1 (emp_name);";
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("Index created");
}
}
上記のプログラムをクラス名の後に.javaを付けて保存し、保存されている場所を参照します。以下に示すように、プログラムをコンパイルして実行します。
$javac Create_Index.java
$java Create_Index
通常の状態では、次の出力が生成されます。
Index created
インデックスを削除する
コマンドを使用してインデックスを削除できます DROP INDEX。その構文は次のとおりです-
DROP INDEX <identifier>
以下に示すのは、テーブル内の列のインデックスを削除する例です。ここでは、テーブルempの列名のインデックスを削除しています。
cqlsh:tp> drop index name;
JavaAPIを使用したインデックスの削除
Sessionクラスのexecute()メソッドを使用して、テーブルのインデックスを削除できます。以下の手順に従って、テーブルからインデックスを削除します。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builder object。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ここでは、という名前のKeySpaceを使用しています tp. したがって、以下に示すようにセッションオブジェクトを作成します。
Session session = cluster.connect(“ tp” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。文字列形式またはとしてクエリを渡しますStatementexecute()メソッドのクラスオブジェクト。文字列形式でこのメソッドに渡すものはすべて、で実行されます。cqlsh。
次の例では、のインデックス「name」を削除しています。 empテーブル。以下に示すように、クエリを文字列変数に格納し、execute()メソッドに渡す必要があります。
//Query
String query = "DROP INDEX user_name;";
session.execute(query);
以下に示すのは、JavaAPIを使用してCassandraにインデックスをドロップするための完全なプログラムです。
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Drop_Index {
public static void main(String args[]){
//Query
String query = "DROP INDEX user_name;";
//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("Index dropped");
}
}
上記のプログラムをクラス名の後に.javaを付けて保存し、保存されている場所を参照します。以下に示すように、プログラムをコンパイルして実行します。
$javac Drop_index.java
$java Drop_index
通常の状態では、次の出力が生成されます。
Index dropped
バッチステートメントの使用
使用する BATCH,複数の変更ステートメント(挿入、更新、削除)を同時に実行できます。その構文は次のとおりです-
BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCH
例
Cassandraにempというテーブルがあり、次のデータがあるとします。
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | デリー | 9848022339 | 50000 |
3 | ラーマン | チェンナイ | 9848022330 | 45000 |
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID3の従業員の給与を50000に更新します。
- 行ID2の従業員の都市を削除します。
上記の操作を一度に実行するには、次のBATCHコマンドを使用します-
cqlsh:tutorialspoint> 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:tutorialspoint> 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)
ここでは、変更されたデータを含むテーブルを観察できます。
JavaAPIを使用したバッチステートメント
バッチステートメントは、Sessionクラスのexecute()メソッドを使用して、プログラムでテーブルに記述できます。以下の手順に従って、JavaAPIを使用してバッチステートメントを使用して複数のステートメントを実行します。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードを使用して、クラスターオブジェクトを作成します-
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ”);
ここでは、という名前のKeySpaceを使用しています tp。したがって、以下に示すようにセッションオブジェクトを作成します。
Session session = cluster.connect(“tp”);
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。クエリを文字列形式またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。文字列形式でこのメソッドに渡すものはすべて、で実行されます。cqlsh。
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID3の従業員の給与を50000に更新します。
- 行ID2の従業員の都市を削除します。
以下に示すように、クエリを文字列変数に格納し、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;”;
以下に示すのは、JavaAPIを使用して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
テーブルにデータを作成する
コマンドを使用して、テーブルの行の列にデータを挿入できます。 INSERT。以下に、テーブルにデータを作成するための構文を示します。
INSERT INTO <tablename>
(<column1 name>, <column2 name>....)
VALUES (<value1>, <value2>....)
USING <option>
例
と呼ばれるテーブルがあるとしましょう emp 列(emp_id、emp_name、emp_city、emp_phone、emp_sal)を使用し、次のデータをに挿入する必要があります emp テーブル。
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | ハイデラバード | 9848022339 | 40000 |
3 | ラーマン | チェンナイ | 9848022330 | 45000 |
以下のコマンドを使用して、テーブルに必要なデータを入力します。
cqlsh:tutorialspoint> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);
cqlsh:tutorialspoint> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(2,'robin', 'Hyderabad', 9848022339, 40000);
cqlsh:tutorialspoint> INSERT INTO emp (emp_id, emp_name, emp_city,
emp_phone, emp_sal) VALUES(3,'rahman', 'Chennai', 9848022330, 45000);
検証
データを挿入した後、SELECTステートメントを使用して、データが挿入されているかどうかを確認します。SELECTステートメントを使用してempテーブルを検証すると、次の出力が得られます。
cqlsh:tutorialspoint> 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)
ここでは、挿入したデータがテーブルに入力されていることを確認できます。
JavaAPIを使用したデータの作成
Sessionクラスのexecute()メソッドを使用して、テーブルにデータを作成できます。以下の手順に従って、JavaAPIを使用してテーブルにデータを作成します。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint("127.0.0.1");
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードは、クラスターオブジェクトを作成する方法を示しています。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ” );
ここでは、KeySpaceと呼ばれるものを使用しています tp。したがって、以下に示すようにセッションオブジェクトを作成します。
Session session = cluster.connect(“ tp” );
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。文字列形式またはとしてクエリを渡しますStatementexecute()メソッドのクラスオブジェクト。文字列形式でこのメソッドに渡すものはすべて、で実行されます。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);
以下に示すのは、JavaAPIを使用して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
テーブル内のデータの更新
UPDATEテーブル内のデータを更新するために使用されるコマンドです。次のキーワードは、テーブルのデータを更新するときに使用されます-
Where −この句は、更新する行を選択するために使用されます。
Set −このキーワードを使用して値を設定します。
Must −主キーを構成するすべての列が含まれます。
行の更新中に、特定の行が使用できない場合、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 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | ハイデラバード | 9848022339 | 40000 |
3 | ラーマン | チェンナイ | 9848022330 | 45000 |
ロビンのemp_cityをデリーに更新し、彼の給与を50000に更新しましょう。以下に、必要な更新を実行するためのクエリを示します。
cqlsh:tutorialspoint> UPDATE emp SET emp_city='Delhi',emp_sal=50000
WHERE emp_id=2;
検証
SELECTステートメントを使用して、データが更新されているかどうかを確認します。SELECTステートメントを使用してempテーブルを検証すると、次の出力が生成されます。
cqlsh:tutorialspoint> 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)
ここでは、テーブルデータが更新されていることを確認できます。
JavaAPIを使用したデータの更新
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを更新できます。Java APIを使用してテーブルのデータを更新するには、以下の手順に従ってください。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint("127.0.0.1");
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードを使用して、クラスターオブジェクトを作成します。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name”);
ここでは、という名前のKeySpaceを使用しています 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;” ;
以下に示すのは、JavaAPIを使用してテーブル内のデータを更新するための完全なプログラムです。
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
Select句を使用したデータの読み取り
SELECT句は、Cassandraのテーブルからデータを読み取るために使用されます。この句を使用すると、テーブル全体、単一の列、または特定のセルを読み取ることができます。SELECT句の構文は次のとおりです。
SELECT FROM <tablename>
例
キースペースにという名前のテーブルがあると仮定します emp 以下の詳細で-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | ヌル | 9848022339 | 50000 |
3 | ラーマン | チェンナイ | 9848022330 | 50000 |
4 | ラジーブ | プネ | 9848022331 | 30000 |
次の例は、SELECT句を使用してテーブル全体を読み取る方法を示しています。ここでは、というテーブルを読んでいますemp。
cqlsh:tutorialspoint> 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:tutorialspoint> 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>;
Note − WHERE句は、主キーの一部であるか、セカンダリインデックスがある列でのみ使用できます。
次の例では、給与が50000の従業員の詳細を読み取っています。まず、セカンダリインデックスを列emp_salに設定します。
cqlsh:tutorialspoint> CREATE INDEX ON emp(emp_sal);
cqlsh:tutorialspoint> 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
JavaAPIを使用したデータの読み取り
Sessionクラスのexecute()メソッドを使用して、テーブルからデータを読み取ることができます。以下の手順に従って、JavaAPIを使用してバッチステートメントを使用して複数のステートメントを実行します。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードを使用して、クラスターオブジェクトを作成します。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“Your keyspace name”);
ここでは、KeySpaceと呼ばれるものを使用しています 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オブジェクトを取得する
selectクエリは、結果を次の形式で返します。 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("tutorialspoint");
//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]]
Select句を使用したデータの読み取り
SELECT句は、Cassandraのテーブルからデータを読み取るために使用されます。この句を使用すると、テーブル全体、単一の列、または特定のセルを読み取ることができます。SELECT句の構文は次のとおりです。
SELECT FROM <tablename>
例
キースペースにという名前のテーブルがあると仮定します emp 以下の詳細で-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | ヌル | 9848022339 | 50000 |
3 | ラーマン | チェンナイ | 9848022330 | 50000 |
4 | ラジーブ | プネ | 9848022331 | 30000 |
次の例は、SELECT句を使用してテーブル全体を読み取る方法を示しています。ここでは、というテーブルを読んでいますemp。
cqlsh:tutorialspoint> 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:tutorialspoint> 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>;
Note − WHERE句は、主キーの一部であるか、セカンダリインデックスがある列でのみ使用できます。
次の例では、給与が50000の従業員の詳細を読み取っています。まず、セカンダリインデックスを列emp_salに設定します。
cqlsh:tutorialspoint> CREATE INDEX ON emp(emp_sal);
cqlsh:tutorialspoint> 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
JavaAPIを使用したデータの読み取り
Sessionクラスのexecute()メソッドを使用して、テーブルからデータを読み取ることができます。以下の手順に従って、JavaAPIを使用してバッチステートメントを使用して複数のステートメントを実行します。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードを使用して、クラスターオブジェクトを作成します。
//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( );
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“Your keyspace name”);
ここでは、KeySpaceと呼ばれるものを使用しています 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オブジェクトを取得する
selectクエリは、結果を次の形式で返します。 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("tutorialspoint");
//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]]
テーブルからのデータの削除
コマンドを使用してテーブルからデータを削除できます DELETE。その構文は次のとおりです-
DELETE FROM <identifier> WHERE <condition>;
例
Cassandraにというテーブルがあるとしましょう emp 以下のデータを持っている-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | 羊 | ハイデラバード | 9848022338 | 50000 |
2 | ロビン | ハイデラバード | 9848022339 | 40000 |
3 | ラーマン | チェンナイ | 9848022330 | 45000 |
次のステートメントは、最後の行のemp_sal列を削除します-
cqlsh:tutorialspoint> DELETE emp_sal FROM emp WHERE emp_id=3;
検証
SELECTステートメントを使用して、データが削除されているかどうかを確認します。SELECTを使用してempテーブルを検証すると、次の出力が生成されます。
cqlsh:tutorialspoint> 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)
Rahmanの給与を削除したため、給与の代わりにnull値が表示されます。
行全体を削除する
次のコマンドは、テーブルから行全体を削除します。
cqlsh:tutorialspoint> DELETE FROM emp WHERE emp_id=3;
検証
SELECTステートメントを使用して、データが削除されているかどうかを確認します。SELECTを使用してempテーブルを検証すると、次の出力が生成されます。
cqlsh:tutorialspoint> 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行しか残っていません。
JavaAPIを使用したデータの削除
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを削除できます。Java APIを使用してテーブルからデータを削除するには、以下の手順に従ってください。
ステップ1:クラスターオブジェクトを作成する
のインスタンスを作成します Cluster.builder のクラス com.datastax.driver.core 以下に示すパッケージ。
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
を使用して連絡先(ノードのIPアドレス)を追加します addContactPoint() の方法 Cluster.Builderオブジェクト。このメソッドはCluster.Builder。
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。これを行うには、次のメソッドがありますbuild() の中に Cluster.Builderクラス。次のコードを使用して、クラスターオブジェクトを作成します。
//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();
このメソッドは、新しいセッションを作成して初期化します。すでにキースペースがある場合は、以下に示すように、文字列形式のKeySpace名をこのメソッドに渡すことで、既存のキースペースに設定できます。
Session session = cluster.connect(“ Your keyspace name ”);
ここでは、KeySpaceと呼ばれるものを使用しています 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);
以下に示すのは、JavaAPIを使用して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
CQLは、コレクションタイプを含む、豊富な組み込みデータタイプのセットを提供します。これらのデータ型に加えて、ユーザーは独自のカスタムデータ型を作成することもできます。次の表に、CQLで使用できる組み込みデータ型のリストを示します。
データ・タイプ | 定数 | 説明 |
---|---|---|
アスキー | 文字列 | ASCII文字列を表します |
bigint | bigint | 64ビットの符号付きlongを表します |
blob | ブロブ | 任意のバイトを表します |
ブール値 | ブール値 | trueまたはfalseを表します |
counter | 整数 | カウンター列を表します |
10進数 | 整数、浮動小数点 | 可変精度の10進数を表します |
ダブル | 整数 | 64ビットIEEE-754浮動小数点を表します |
浮く | 整数、浮動小数点 | 32ビットIEEE-754浮動小数点を表します |
inet | 文字列 | IPアドレス、IPv4またはIPv6を表します |
int | 整数 | 32ビットのsignedintを表します |
テキスト | 文字列 | UTF8でエンコードされた文字列を表します |
timestamp | 整数、文字列 | タイムスタンプを表します |
timeuuid | uuids | タイプ1UUIDを表します |
uuid | uuids | タイプ1またはタイプ4を表します |
UUID | ||
varchar | 文字列 | uTF8でエンコードされた文字列を表します |
バリント | 整数 | 任意精度の整数を表します |
コレクションの種類
Cassandraクエリ言語はコレクションデータ型も提供します。次の表に、CQLで使用できるコレクションのリストを示します。
コレクション | 説明 |
---|---|
リスト | リストは、1つ以上の順序付けられた要素のコレクションです。 |
地図 | マップは、キーと値のペアのコレクションです。 |
セットする | セットは、1つ以上の要素のコレクションです。 |
ユーザー定義のデータ型
Cqlshは、ユーザーに独自のデータ型を作成する機能を提供します。以下に示すのは、ユーザー定義のデータ型を処理するときに使用されるコマンドです。
CREATE TYPE −ユーザー定義のデータ型を作成します。
ALTER TYPE −ユーザー定義のデータ型を変更します。
DROP TYPE −ユーザー定義のデータ型を削除します。
DESCRIBE TYPE −ユーザー定義のデータ型を記述します。
DESCRIBE TYPES −ユーザー定義のデータ型について説明します。
CQLは、コレクションデータ型を使用する機能を提供します。これらのコレクションタイプを使用すると、1つの変数に複数の値を格納できます。この章では、Cassandraでコレクションを使用する方法について説明します。
リスト
リストは、次の場合に使用されます
- 要素の順序が維持され、
- 値は複数回保存されます。
リスト内の要素のインデックスを使用して、リストデータ型の値を取得できます。
リスト付きのテーブルの作成
以下に、nameとemailの2つの列を持つサンプルテーブルを作成する例を示します。複数のメールを保存するために、リストを使用しています。
cqlsh:tutorialspoint> CREATE TABLE data(name text PRIMARY KEY, email list<text>);
リストへのデータの挿入
リスト内の要素にデータを挿入するときは、以下に示すように、すべての値を中括弧[]内にコンマで区切って入力します。
cqlsh:tutorialspoint> INSERT INTO data(name, email) VALUES ('ramu',
['[email protected]','[email protected]'])
リストの更新
以下に示すのは、というテーブルのリストデータ型を更新する例です。 data。ここでは、リストに別のメールを追加しています。
cqlsh:tutorialspoint> UPDATE data
... SET email = email +['[email protected]']
... where name = 'ramu';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます。
cqlsh:tutorialspoint> SELECT * FROM data;
name | email
------+--------------------------------------------------------------
ramu | ['[email protected]', '[email protected]', '[email protected]']
(1 rows)
セットする
セットは、要素のグループを格納するために使用されるデータ型です。セットの要素は、ソートされた順序で返されます。
セットでテーブルを作成する
次の例では、nameとphoneの2つの列を持つサンプルテーブルを作成します。複数の電話番号を保存するために、setを使用しています。
cqlsh:tutorialspoint> CREATE TABLE data2 (name text PRIMARY KEY, phone set<varint>);
セットへのデータの挿入
セット内の要素にデータを挿入するときは、以下に示すように、中括弧{}内にすべての値をコンマで区切って入力します。
cqlsh:tutorialspoint> INSERT INTO data2(name, phone)VALUES ('rahman', {9848022338,9848022339});
セットの更新
次のコードは、data2という名前のテーブルのセットを更新する方法を示しています。ここでは、別の電話番号をセットに追加しています。
cqlsh:tutorialspoint> UPDATE data2
... SET phone = phone + {9848022330}
... where name = 'rahman';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます。
cqlsh:tutorialspoint> SELECT * FROM data2;
name | phone
--------+--------------------------------------
rahman | {9848022330, 9848022338, 9848022339}
(1 rows)
地図
マップは、要素のキーと値のペアを格納するために使用されるデータ型です。
マップを使用したテーブルの作成
次の例は、名前と住所の2つの列を持つサンプルテーブルを作成する方法を示しています。複数のアドレス値を格納するために、mapを使用しています。
cqlsh:tutorialspoint> CREATE TABLE data3 (name text PRIMARY KEY, address
map<timestamp, text>);
マップへのデータの挿入
マップの要素にデータを挿入するときに、すべての key : value 以下に示すように、中括弧{}内でコンマで区切られたペア。
cqlsh:tutorialspoint> INSERT INTO data3 (name, address)
VALUES ('robin', {'home' : 'hyderabad' , 'office' : 'Delhi' } );
セットの更新
次のコードは、data3という名前のテーブルのマップデータ型を更新する方法を示しています。ここでは、キーオフィスの値を変更します。つまり、robinという名前の人のオフィスアドレスを変更します。
cqlsh:tutorialspoint> UPDATE data3
... SET address = address+{'office':'mumbai'}
... WHERE name = 'robin';
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます。
cqlsh:tutorialspoint> select * from data3;
name | address
-------+-------------------------------------------
robin | {'home': 'hyderabad', 'office': 'mumbai'}
(1 rows)
CQLは、ユーザー定義のデータ型を作成および使用する機能を提供します。複数のフィールドを処理するデータ型を作成できます。この章では、ユーザー定義のデータ型を作成、変更、および削除する方法について説明します。
ユーザー定義のデータ型の作成
コマンド CREATE TYPEユーザー定義のデータ型を作成するために使用されます。その構文は次のとおりです-
CREATE TYPE <keyspace name>. <data typename>
( variable1, variable2).
例
以下に、ユーザー定義のデータ型を作成する例を示します。この例では、card_details 次の詳細を含むデータ型。
フィールド | フィールド名 | データ・タイプ |
---|---|---|
クレジットカード番号 | num | int |
クレジットカードの暗証番号 | ピン | int |
クレジットカードの名義 | 名前 | テキスト |
cvv | cvv | int |
カード所有者の連絡先 | 電話 | セットする |
cqlsh:tutorialspoint> CREATE TYPE card_details (
... num int,
... pin int,
... name text,
... cvv int,
... phone set<int>
... );
Note −ユーザー定義のデータ型に使用される名前は、予約された型の名前と一致してはなりません。
検証
使用 DESCRIBE 作成されたタイプが作成されたかどうかを確認するコマンド。
CREATE TYPE tutorialspoint.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:tutorialspoint> ALTER TYPE card_details ADD email text;
検証
使用 DESCRIBE 新しいフィールドが追加されているかどうかを確認するコマンド。
cqlsh:tutorialspoint> describe type card_details;
CREATE TYPE tutorialspoint.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
);
タイプ内のフィールドの名前を変更する
次の構文を使用して、既存のユーザー定義データ型の名前を変更します。
ALTER TYPE typename
RENAME existing_name TO new_name;
次のコードは、タイプのフィールドの名前を変更します。ここでは、フィールドの電子メールの名前をメールに変更しています。
cqlsh:tutorialspoint> ALTER TYPE card_details RENAME email TO mail;
検証
使用 DESCRIBE タイプ名が変更されたかどうかを確認するコマンド。
cqlsh:tutorialspoint> describe type card_details;
CREATE TYPE tutorialspoint.card_details (
num int,
pin int,
name text,
cvv int,
phone set<int>,
mail text
);
ユーザー定義のデータ型の削除
DROP TYPEユーザー定義のデータ型を削除するために使用されるコマンドです。以下に、ユーザー定義のデータ型を削除する例を示します。
例
削除する前に、を使用してすべてのユーザー定義データ型のリストを確認してください DESCRIBE_TYPES 以下に示すコマンド。
cqlsh:tutorialspoint> DESCRIBE TYPES;
card_details card
2つのタイプから、という名前のタイプを削除します card 以下に示すように。
cqlsh:tutorialspoint> drop type card;
使用 DESCRIBE データ型が削除されたかどうかを確認するコマンド。
cqlsh:tutorialspoint> describe types;
card_details