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