Cassandra Lenguaje de consulta (CQL): Inserción, actualización y eliminación
⚡ Resumen inteligente
Cassandra El lenguaje de consulta (Query Language) gestiona las operaciones de inserción, actualización, eliminación y lectura con una sintaxis similar a SQL, pero con una semántica interna diferente. Esta página describe cada instrucción, el comportamiento de la operación upsert (que combina las inserciones y actualizaciones) y las limitaciones reales de la cláusula WHERE.

Insertar datos
El Cassandra insertar declaración escribe datos en Cassandra columnas en forma de fila. Cassandra La consulta de inserción almacenará solo aquellas columnas proporcionadas por el usuario. Debe especificar necesariamente solo la columna de clave principal.
No ocupará ningún espacio para los valores no dados. No se devuelven resultados después de la inserción.
Sintaxis
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Ejemplo
Aquí la instantánea del ejecutado. Cassandra Insertar en la consulta de tabla que insertará un registro en Cassandra tabla 'Estudiante'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Después de la ejecución exitosa del comando Insertar en Cassandra, se insertará una fila en el Cassandra tabla Estudiante con RollNo 2, Nombre Michael, departamento CS y Semestre 2.
Aquí está la instantánea del estado actual de la base de datos.
Insertar datos
Cassandra se molesta. Upsert significa que Cassandra insertará una fila si aún no existe una clave principal; de lo contrario, si la clave principal ya existe, actualizará esa fila.
Esto tiene una consecuencia práctica que conviene aclarar: una instrucción INSERT nunca informa de un error de clave duplicada, por lo que una reinserción accidental sobrescribe la fila existente sin previo aviso. Cuando esto deba evitarse, añada IF NOT EXISTS para que la instrucción se convierta en una transacción ligera.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Las transacciones ligeras utilizan una ronda de consenso entre réplicas, por lo que son considerablemente más lentas que una escritura normal y deben reservarse para los casos que realmente necesiten la verificación.
Actualizar datos
El Cassandra La consulta de actualización se utiliza para actualizar los datos en el Cassandra mesaSi no se obtienen resultados después de actualizar los datos, significa que los datos se actualizaron correctamente; de lo contrario, se devolverá un error. Los valores de las columnas se modifican en la cláusula "Set" mientras que los datos se filtran con la cláusula "Where".
Sintaxis
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Ejemplo
Aquí está la captura de pantalla que muestra el estado de la base de datos antes de actualizar los datos.
Aquí la instantánea del ejecutado. Cassandra Comando de actualización que actualiza el registro en la tabla de Estudiantes.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Después de la ejecución exitosa de la consulta de actualización en Cassandra 'Actualizar estudiante', el nombre del estudiante se cambiará de 'Clark' a 'Hayden' que tiene el número 1.
Aquí está la captura de pantalla que muestra el estado de la base de datos después de actualizar los datos.
Debido al comportamiento de inserción/actualización, una actualización realizada sobre una clave primaria que no existe crea la fila en lugar de fallar.
Cassandra Borrar datos
El comando "Eliminar" elimina una fila completa o algunas columnas de la tabla Estudiante. Cuando se eliminan datos, no se eliminan de la tabla inmediatamente. En su lugar, los datos eliminados se marcan con una lápida y se eliminan después de la compactación.
Sintaxis
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Lo anterior Cassandra La sintaxis de eliminación de filas eliminará una o más filas dependiendo de la filtración de datos en la cláusula Where.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
La sintaxis anterior eliminará algunas columnas de la tabla.
Ejemplo
Aquí está la instantánea que muestra el estado actual de la base de datos antes de eliminar datos.
Aquí está la instantánea del comando que eliminará una fila de la tabla Estudiante.
DELETE FROM University.Student WHERE rollno = 1;
Tras la ejecución exitosa del comando CQL Delete, se eliminará una fila de la tabla Student donde el valor de rollno sea 1.
Aquí está la instantánea que muestra el estado de la base de datos después de eliminar datos.
Los marcadores de eliminación se conservan durante gc_grace_seconds, diez días por defecto, de modo que un nodo desconectado durante la eliminación no puede recuperar la fila al volver a conectarse. Por lo tanto, al eliminar grandes volúmenes, quedan marcadores que cada lectura posterior debe pasar por alto.
Lo que Cassandra no soporta
CQL toma prestada la sintaxis de SQL, pero no el modelo de ejecución relacional, por lo que varias construcciones familiares se comportan de manera diferente o están ausentes.
- CQL no admite uniones entre tablas. Los datos relacionados deben desnormalizarse en una sola tabla al momento de la escritura.
- CQL no admite condiciones OR en una cláusula WHERE. Utilice IN en una sola columna o ejecute consultas separadas.
- CQL no admite UNION ni INTERSECT.
- Las columnas que no son clave primaria no se pueden filtrar hasta que exista un índice sobre ellas.
- Las comparaciones de "mayor que" y "menor que" solo se aplican a las columnas de agrupación, porque solo estas se ordenan en el disco.
- La coincidencia de patrones con LIKE requiere un índice SASI y no está disponible en columnas ordinarias.
Es necesario corregir una afirmación que lleva mucho tiempo sin resolverse. Se admiten funciones de agregación: CONTAR, MÍNIMO, MÁXIMO, SUMA y AVG llegó a Cassandra 2.2, y GRUPO POR Llegó en la versión 3.10. La salvedad radica en el alcance, no en la disponibilidad.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Restringido a una sola partición como se indicó anteriormente, un agregado es eficiente. Ejecutado en toda la tabla se convierte en un escaneo de todo el clúster, por eso Cassandra sigue siendo inadecuado para análisis ad hoc y por qué los informes pesados normalmente se empujan a Spark o un almacén externo.
Cassandra Dónde cláusula
In Cassandra, la recuperación de datos es un tema delicado. La columna se filtra en Cassandra creando un índice en columnas de clave no principal.
Sintaxis
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Ejemplo
- Aquí está la instantánea que muestra la recuperación de datos de la tabla de Estudiantes sin filtración de datos.
SELECT * FROM University.Student;
Se recuperan dos registros de la tabla de Estudiantes.
- Aquí está la instantánea que muestra la recuperación de datos de Student con filtración de datos. Se recupera un registro.
Los datos se filtran por la columna nombre. Se recuperan todos los registros que tienen nombre igual a Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Las reglas que rigen a qué columnas puede hacer referencia una cláusula WHERE se derivan directamente de la clave primaria.
- El clave de partición Debe proporcionarse en su totalidad para cualquier consulta eficiente, ya que identifica el nodo que contiene los datos.
- Clustercolumnas Pueden entonces estar restringidas, pero solo en el orden en que fueron declaradas. Saltarping Uno es rechazado.
- Las comparaciones de rangos están permitidas en la última columna de agrupamiento a la que se hace referencia, no en las anteriores.
- Año otra columna necesita un índice secundario, cubierto en el crear y eliminar índice tutorial.
Cuando se rechaza una consulta, Cassandra A menudo sugiere agregar ALLOW FILTERING. Considere esto como una advertencia, no como una solución: escanea cada partición en cada nodo, y un cambio de esquema es casi siempre la respuesta correcta.










