Cassandra - Leggi i dati

Lettura dei dati utilizzando la clausola Select

La clausola SELECT viene utilizzata per leggere i dati da una tabella in Cassandra. Usando questa clausola, puoi leggere un'intera tabella, una singola colonna o una cella particolare. Di seguito è riportata la sintassi della clausola SELECT.

SELECT FROM <tablename>

Esempio

Supponiamo che ci sia una tabella nello spazio delle chiavi denominato emp con i seguenti dettagli -

emp_id emp_name emp_city emp_phone emp_sal
1 ariete Hyderabad 9848022338 50000
2 pettirosso nullo 9848022339 50000
3 rahman Chennai 9848022330 50000
4 rajeev Pune 9848022331 30000

L'esempio seguente mostra come leggere un'intera tabella utilizzando la clausola SELECT. Qui stiamo leggendo una tabella chiamataemp.

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)

Lettura delle colonne obbligatorie

L'esempio seguente mostra come leggere una particolare colonna in una tabella.

cqlsh:tutorialspoint> SELECT emp_name, emp_sal from emp;

 emp_name | emp_sal
----------+---------
      ram | 50000
    robin | 50000
   rajeev | 30000
   rahman | 50000 
	
(4 rows)

Dove la clausola

Utilizzando la clausola WHERE, è possibile applicare un vincolo alle colonne richieste. La sua sintassi è la seguente:

SELECT FROM <table name> WHERE <condition>;

Note - Una clausola WHERE può essere utilizzata solo sulle colonne che fanno parte della chiave primaria o hanno un indice secondario su di esse.

Nel seguente esempio, stiamo leggendo i dettagli di un dipendente il cui stipendio è 50000. Innanzitutto, imposta l'indice secondario sulla colonna 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

Lettura dei dati utilizzando l'API Java

È possibile leggere i dati da una tabella utilizzando il metodo execute () della classe Session. Seguire i passaggi indicati di seguito per eseguire più istruzioni utilizzando l'istruzione batch con l'aiuto dell'API Java.

Passaggio 1: creare un oggetto cluster

Crea un'istanza di Cluster.builder classe di com.datastax.driver.core pacchetto come mostrato di seguito.

//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();

Aggiungi un punto di contatto (indirizzo IP del nodo) utilizzando il file addContactPoint() metodo di Cluster.Builderoggetto. Questo metodo restituisceCluster.Builder.

//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );

Utilizzando il nuovo oggetto builder, creare un oggetto cluster. Per fare ciò, hai un metodo chiamatobuild() nel Cluster.Builderclasse. Utilizzare il codice seguente per creare l'oggetto cluster.

//Building a cluster
Cluster cluster = builder.build();

È possibile creare l'oggetto cluster utilizzando una singola riga di codice come mostrato di seguito.

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();

Passaggio 2: creare un oggetto sessione

Crea un'istanza dell'oggetto Session utilizzando il metodo connect () della classe Cluster come mostrato di seguito.

Session session = cluster.connect( );

Questo metodo crea una nuova sessione e la inizializza. Se si dispone già di uno spazio chiavi, è possibile impostarlo su quello esistente passando il nome KeySpace in formato stringa a questo metodo come mostrato di seguito.

Session session = cluster.connect(“Your keyspace name”);

Qui stiamo usando il KeySpace chiamato tp. Pertanto, creare l'oggetto sessione come mostrato di seguito.

Session session = cluster.connect(“tp”);

Passaggio 3: eseguire la query

È possibile eseguire query CQL utilizzando il metodo execute () della classe Session. Passa la query in formato stringa o come oggetto della classe Statement al metodo execute (). Qualunque cosa passi a questo metodo in formato stringa verrà eseguita nel filecqlsh.

In questo esempio, stiamo recuperando i dati da emptavolo. Memorizza la query in una stringa e passala al metodo execute () della classe di sessione come mostrato di seguito.

String query = ”SELECT 8 FROM emp”;
session.execute(query);

Esegui la query utilizzando il metodo execute () della classe Session.

Passaggio 4: ottenere l'oggetto ResultSet

Le query di selezione restituiranno il risultato sotto forma di un file ResultSet oggetto, quindi memorizzare il risultato nell'oggetto di RESULTSET classe come mostrato di seguito.

ResultSet result = session.execute( );

Di seguito è riportato il programma completo per leggere i dati da una tabella.

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());
   }
}

Salva il programma sopra con il nome della classe seguito da .java, vai alla posizione in cui è stato salvato. Compilare ed eseguire il programma come mostrato di seguito.

$javac Read_Data.java
$java Read_Data

In condizioni normali, dovrebbe produrre il seguente output:

[Row[1, Hyderabad, ram, 9848022338, 50000], Row[2, Delhi, robin,
9848022339, 50000], Row[4, Pune, rajeev, 9848022331, 30000], Row[3,
Chennai, rahman, 9848022330, 50000]]