Cassandra-データの読み取り
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]]