Cassandra Abfragesprache (CQL): Einfügen, Aktualisieren und Löschen
⚡ Intelligente Zusammenfassung
Cassandra Die Abfragesprache verarbeitet Einfüge-, Aktualisierungs-, Lösch- und Leseoperationen mit einer Syntax, die SQL ähnelt, aber eine andere Semantik aufweist. Diese Seite behandelt jede Anweisung, das Upsert-Verhalten, das Einfüge- und Aktualisierungsoperationen zusammenfasst, sowie die tatsächlichen Grenzen der WHERE-Klausel.

Daten einfügen
Das Cassandra insert-Anweisung schreibt Daten hinein Cassandra Spalten in Zeilenform. Cassandra Die Einfügeabfrage speichert nur die vom Benutzer angegebenen Spalten. Sie müssen unbedingt nur die Primärschlüsselspalte angeben.
Es wird kein Platz für nicht angegebene Werte benötigt. Nach dem Einfügen werden keine Ergebnisse zurückgegeben.
Syntax
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Beispiel
Hier ist der Schnappschuss der Hingerichteten Cassandra Abfrage zum Einfügen in eine Tabelle, in die ein Datensatz eingefügt wird Cassandra Tabelle „Student“.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Nach erfolgreicher Ausführung des Befehls Einfügen in Cassandra, wird eine Zeile in die eingefügt Cassandra Tabelle Student mit RollenNr. 2, Name Michael, Abteilung CS und Semester 2.
Hier ist die Momentaufnahme des aktuellen Datenbankstatus.
Daten hochladen
Cassandra stört. Upsert bedeutet das Cassandra fügt eine Zeile ein, wenn noch kein Primärschlüssel vorhanden ist, andernfalls wird die Zeile aktualisiert, wenn bereits ein Primärschlüssel vorhanden ist.
Dies hat eine praktische Konsequenz, die es wert ist, deutlich erwähnt zu werden: Ein INSERT-Befehl meldet niemals einen Fehler wegen doppelter Schlüssel. Daher überschreibt ein versehentliches erneutes Einfügen die bestehende Zeile ohne Warnung. Um dies zu verhindern, fügen Sie IF NOT EXISTS hinzu, um die Anweisung zu einer schlanken Transaktion zu machen.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Lightweight-Transaktionen nutzen eine Konsensrunde über Replikate hinweg, sind daher deutlich langsamer als normale Schreibvorgänge und sollten Fällen vorbehalten bleiben, in denen die Überprüfung wirklich notwendig ist.
Daten aktualisieren
Das Cassandra Die Aktualisierungsabfrage wird verwendet, um die Daten im zu aktualisieren Cassandra Tabelle. Wenn nach dem Aktualisieren der Daten keine Ergebnisse zurückgegeben werden, bedeutet dies, dass die Daten erfolgreich aktualisiert wurden. Andernfalls wird ein Fehler zurückgegeben. Spaltenwerte werden in der Klausel „Set“ geändert, während die Daten mit der Klausel „Where“ gefiltert werden.
Syntax
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Beispiel
Hier ist der Screenshot, der den Datenbankstatus vor der Aktualisierung der Daten zeigt.
Hier ist der Schnappschuss der Hingerichteten Cassandra Update-Befehl, der den Datensatz in der Student-Tabelle aktualisiert.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Nach erfolgreicher Ausführung der Update-Abfrage in Cassandra „Student aktualisieren“, der Name des Studenten wird von „Clark“ in „Hayden“ mit Rollennummer 1 geändert.
Hier ist der Screenshot, der den Datenbankstatus nach der Aktualisierung der Daten zeigt.
Aufgrund des Upsert-Verhaltens wird bei einem UPDATE-Befehl für einen nicht existierenden Primärschlüssel die Zeile erstellt, anstatt dass ein Fehler auftritt.
Cassandra Daten löschen
Der Befehl „Löschen“ entfernt eine ganze Zeile oder einige Spalten aus der Tabelle Student. Wenn Daten gelöscht werden, werden sie nicht sofort aus der Tabelle gelöscht. Stattdessen werden gelöschte Daten mit einem Tombstone markiert und nach der Komprimierung entfernt.
Syntax
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Die obige Cassandra Die Syntax zum Löschen von Zeilen löscht eine oder mehrere Zeilen, abhängig von der Datenfilterung in der Where-Klausel.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Die obige Syntax löscht einige Spalten aus der Tabelle.
Beispiel
Hier ist der Snapshot, der den aktuellen Datenbankstatus vor dem Löschen von Daten zeigt.
Hier ist die Momentaufnahme des Befehls, der eine Zeile aus der Tabelle „Student“ entfernt.
DELETE FROM University.Student WHERE rollno = 1;
Nach erfolgreicher Ausführung des CQL-Befehls Delete wird eine Zeile aus der Tabelle Student gelöscht, in der die Rollnummer den Wert 1 hat.
Hier ist der Snapshot, der den Datenbankstatus nach dem Löschen von Daten zeigt.
Tombstones bleiben für gc_grace_seconds (standardmäßig zehn Tage) erhalten, sodass ein Knoten, der während des Löschvorgangs offline war, die Zeile nach seiner Rückkehr nicht wiederherstellen kann. Das Löschen großer Datenmengen hinterlässt daher Markierungen, die bei jedem nachfolgenden Lesevorgang übersprungen werden müssen.
Was Cassandra nicht unterstützt
CQL übernimmt zwar die SQL-Syntax, aber nicht das relationale Ausführungsmodell, weshalb sich einige bekannte Konstrukte anders verhalten oder fehlen.
- CQL unterstützt keine Joins zwischen Tabellen. Zusammengehörige Daten müssen beim Schreiben in eine einzige Tabelle denormalisiert werden.
- CQL unterstützt keine OR-Bedingungen in einer WHERE-Klausel. Verwenden Sie IN für eine einzelne Spalte oder führen Sie separate Abfragen aus.
- CQL unterstützt weder UNION noch INTERSECT.
- Nicht-Primärschlüsselspalten können erst gefiltert werden, wenn ein Index für sie existiert.
- Die Vergleiche „größer als“ und „kleiner als“ gelten nur für Clusterspalten, da nur diese auf der Festplatte sortiert sind.
- Die Mustererkennung mit LIKE erfordert einen SASI-Index und ist für normale Spalten nicht verfügbar.
Eine seit langem bestehende Behauptung muss korrigiert werden. Aggregatfunktionen werden unterstützt: ANZAHL, MIN, MAX, SUMME und AVG angekommen in Cassandra 2.2 und GRUPPIERE NACH Eingetroffen in Version 3.10. Der Haken liegt eher im Umfang als in der Verfügbarkeit.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Beschränkt man sich wie oben beschrieben auf eine einzelne Partition, ist eine Aggregation effizient. Wird sie jedoch über die gesamte Tabelle ausgeführt, führt sie zu einem clusterweiten Scan, weshalb Cassandra bleibt für Ad-hoc-Analysen ungeeignet und deshalb wird die umfangreiche Berichterstellung normalerweise auf andere Bereiche verlagert. Spark oder ein externes Lager.
Cassandra Where-Klausel
In CassandraDer Datenabruf ist ein heikles Thema. Die Spalte wird eingefiltert Cassandra durch Erstellen eines Index für Nicht-Primärschlüsselspalten.
Syntax
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Beispiel
- Hier ist der Schnappschuss, der den Datenabruf aus der Student-Tabelle ohne Datenfilterung zeigt.
SELECT * FROM University.Student;
Zwei Datensätze werden aus der Student-Tabelle abgerufen.
- Hier ist der Schnappschuss, der den Datenabruf von Student mit Datenfilterung zeigt. Ein Datensatz wird abgerufen.
Die Daten werden anhand der Namensspalte gefiltert. Es werden alle Datensätze abgerufen, deren Name dem angegebenen Wert entspricht. Guru99
SELECT * FROM University.Student WHERE name = 'Guru99';
Die Regeln, welche Spalten eine WHERE-Klausel referenzieren darf, leiten sich direkt vom Primärschlüssel ab.
- Das Partitionsschlüssel Für eine effiziente Abfrage muss der vollständige Parameter angegeben werden, da er den Knoten identifiziert, der die Daten enthält.
- ClusterSpalten Sie können dann eingeschränkt werden, aber nur in der Reihenfolge ihrer Deklaration. Überspringenping Eine wird abgelehnt.
- Bereichsvergleiche sind nur für die zuletzt referenzierte Clusterspalte zulässig, nicht für frühere.
- Jedes andere Spalte benötigt einen Sekundärindex, der im Folgenden behandelt wird Index erstellen und löschen Tutorial.
Wenn eine Anfrage abgelehnt wird, Cassandra Oft wird vorgeschlagen, ALLOW FILTERING anzuhängen. Betrachten Sie dies eher als Warnung denn als Lösung: Es durchsucht jede Partition auf jedem Knoten, und eine Schemaänderung ist fast immer die richtige Reaktion.










