Cassandra - Extractos por lotes

Usar declaraciones por lotes

Utilizando BATCH,puede ejecutar múltiples declaraciones de modificación (insertar, actualizar, eliminar) simultáneamente. Su sintaxis es la siguiente:

BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCH

Ejemplo

Suponga que hay una tabla en Cassandra llamada emp que tiene los siguientes datos:

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

En este ejemplo, realizaremos las siguientes operaciones:

  • Inserte una nueva fila con los siguientes detalles (4, rajeev, pune, 9848022331, 30000).
  • Actualice el salario del empleado con el ID de fila 3 a 50000.
  • Elimina la ciudad del empleado con la identificación de fila 2.

Para realizar las operaciones anteriores de una sola vez, use el siguiente comando 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;

Verificación

Después de realizar cambios, verifique la tabla usando la instrucción SELECT. Debería producir el siguiente resultado:

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)

Aquí puede observar la tabla con datos modificados.

Declaraciones por lotes utilizando la API de Java

Las sentencias por lotes se pueden escribir mediante programación en una tabla utilizando el método execute () de la clase Session. Siga los pasos que se indican a continuación para ejecutar varias declaraciones utilizando la declaración por lotes con la ayuda de la API de Java.

Paso 1: crear un objeto de clúster

Crea una instancia de Cluster.builder clase de com.datastax.driver.core paquete como se muestra a continuación.

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

Agregue un punto de contacto (dirección IP del nodo) usando el addContactPoint() método de Cluster.Builderobjeto. Este método devuelveCluster.Builder.

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

Con el nuevo objeto generador, cree un objeto de clúster. Para hacerlo, tienes un método llamadobuild() en el Cluster.Builderclase. Utilice el siguiente código para crear el objeto de clúster:

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

Puede crear el objeto de clúster utilizando una sola línea de código como se muestra a continuación.

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

Paso 2: crear un objeto de sesión

Cree una instancia del objeto Session utilizando el método connect () de la clase Cluster como se muestra a continuación.

Session session = cluster.connect( );

Este método crea una nueva sesión y la inicializa. Si ya tiene un espacio de claves, puede establecerlo en el existente pasando el nombre del espacio de claves en formato de cadena a este método como se muestra a continuación.

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

Aquí estamos usando el KeySpace llamado tp. Por lo tanto, cree el objeto de sesión como se muestra a continuación.

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

Paso 3: ejecutar la consulta

Puede ejecutar consultas CQL utilizando el método execute () de la clase Session. Pase la consulta en formato de cadena o como un objeto de clase Statement al método execute (). Todo lo que pase a este método en formato de cadena se ejecutará en elcqlsh.

En este ejemplo, realizaremos las siguientes operaciones:

  • Inserte una nueva fila con los siguientes detalles (4, rajeev, pune, 9848022331, 30000).
  • Actualice el salario del empleado con el ID de fila 3 a 50000.
  • Elimine la ciudad del empleado con la identificación de fila 2.

Debe almacenar la consulta en una variable de cadena y pasarla al método execute () como se muestra a continuación.

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;”;

A continuación se muestra el programa completo para ejecutar múltiples declaraciones simultáneamente en una tabla en Cassandra usando la API de Java.

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

Guarde el programa anterior con el nombre de la clase seguido de .java, busque la ubicación donde está guardado. Compile y ejecute el programa como se muestra a continuación.

$javac Batch.java $java Batch

En condiciones normales, debería producir el siguiente resultado:

Changes done