Cassandra Querytaal (CQL): Invoegen, bijwerken en verwijderen
⚡ Slimme samenvatting
Cassandra Query Language verwerkt invoeg-, update-, verwijder- en leesbewerkingen met een syntaxis die lijkt op die van SQL, maar met een andere onderliggende semantiek. Deze pagina behandelt elk van deze statements, het upsert-gedrag dat invoegen en bijwerken combineert, en de werkelijke beperkingen van de WHERE-clausule.
Gegevens invoegen
De Cassandra insert-instructie schrijft gegevens in Cassandra kolommen in rijvorm. Cassandra invoegquery slaat alleen de kolommen op die door de gebruiker zijn opgegeven. U hoeft noodzakelijkerwijs alleen de primaire sleutelkolom op te geven.
Er wordt geen ruimte ingenomen voor niet opgegeven waarden. Er worden geen resultaten geretourneerd na het invoegen.
Syntaxis
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Voorbeeld
Hier is de momentopname van de geëxecuteerde Cassandra Invoegen in tabelquery waarin één record wordt ingevoegd Cassandra tabel 'Studenten'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Na succesvolle uitvoering van het commando Insert into Cassandra, wordt één rij ingevoegd in de Cassandra tabel Student met Rolnr. 2, Naam Michael, afd. CS en Semester 2.
Hier is de momentopname van de huidige databasestatus.
Gegevens bijwerken
Cassandra doet opkomen. Upsert betekent dat Cassandra Voegt een rij in als er nog geen primaire sleutel bestaat. Als de primaire sleutel al bestaat, wordt die rij bijgewerkt.
Dit heeft een praktisch gevolg dat het vermelden waard is: een INSERT-instructie meldt nooit een foutmelding over een dubbele sleutel, waardoor een onbedoelde herinvoeging de bestaande rij zonder waarschuwing overschrijft. Om dit te voorkomen, voegt u IF NOT EXISTS toe om de instructie een lichtgewicht transactie te maken.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Lichtgewicht transacties maken gebruik van een consensusronde over meerdere replica's, waardoor ze aanzienlijk trager zijn dan een normale schrijfbewerking. Ze dienen daarom alleen te worden gebruikt in gevallen waarin de controle echt nodig is.
Gegevens bijwerken
De Cassandra Bijwerkquery wordt gebruikt om de gegevens in het bestand bij te werken Cassandra tafel. Als er geen resultaten worden geretourneerd na het updaten van de data, betekent dit dat de data succesvol is geüpdatet, anders wordt er een fout geretourneerd. Kolomwaarden worden gewijzigd in de 'Set'-clausule terwijl data wordt gefilterd met de 'Where'-clausule.
Syntaxis
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Voorbeeld
Hier is de schermafbeelding die de databasestatus toont voordat de gegevens worden bijgewerkt.
Hier is de momentopname van de geëxecuteerde Cassandra Update-opdracht waarmee de record in de tabel Student wordt bijgewerkt.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Na succesvolle uitvoering van de updatequery in Cassandra 'Update Student', de naam van de student wordt gewijzigd van 'Clark' in 'Hayden' met rolnummer 1.
Hier is de schermafbeelding die de databasestatus toont na het updaten van gegevens.
Door het upsert-gedrag wordt een UPDATE-bewerking op een primaire sleutel die niet bestaat, aangemaakt in plaats van dat de bewerking mislukt.
Cassandra Verwijder data
Commando 'Verwijderen' verwijdert een hele rij of enkele kolommen uit de tabel Student. Wanneer gegevens worden verwijderd, worden deze niet onmiddellijk uit de tabel verwijderd. In plaats daarvan worden verwijderde gegevens gemarkeerd met een grafsteen en na verdichting verwijderd.
Syntaxis
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Bovenstaande Cassandra De rijsyntaxis verwijderen verwijdert een of meer rijen, afhankelijk van de gegevensfiltratie in de Where-clausule.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
De bovenstaande syntaxis verwijdert enkele kolommen uit de tabel.
Voorbeeld
Hier is de momentopname die de huidige databasestatus toont voordat gegevens worden verwijderd.
Hier is de momentopname van de opdracht die één rij uit de tabel Student verwijdert.
DELETE FROM University.Student WHERE rollno = 1;
Na een succesvolle uitvoering van de CQL Delete-opdracht wordt één rij uit de tabel Student verwijderd waar de waarde van rollno 1 is.
Hier is de momentopname die de databasestatus toont na het verwijderen van gegevens.
Grafstenen blijven gc_grace_seconds, standaard tien dagen, bestaan, zodat een knooppunt dat offline is tijdens het verwijderen de rij niet kan herstellen wanneer het weer online komt. Het verwijderen van grote volumes laat daarom markeringen achter waar elke volgende leesbewerking langs moet scannen.
Wat Cassandra ondersteunt
CQL gebruikt SQL-syntaxis, maar niet het relationele uitvoeringsmodel, waardoor verschillende bekende constructies zich anders gedragen of ontbreken.
- CQL ondersteunt geen joins tussen tabellen. Gerelateerde gegevens moeten tijdens het schrijven worden gedenormaliseerd naar één tabel.
- CQL ondersteunt geen OR-voorwaarden in een WHERE-clausule. Gebruik IN op een enkele kolom of voer afzonderlijke query's uit.
- CQL ondersteunt geen UNION of INTERSECT.
- Kolommen die geen primaire sleutel zijn, kunnen pas worden gefilterd als er een index op die kolommen bestaat.
- Vergelijkingen met 'groter dan' en 'kleiner dan' zijn alleen van toepassing op clusterkolommen, omdat alleen die kolommen op de schijf gesorteerd zijn.
- Patroonherkenning met LIKE vereist een SASI-index en is niet beschikbaar voor gewone kolommen.
Een hardnekkige bewering moet worden rechtgezet. Aggregatiefuncties worden ondersteund: AANTAL, MIN, MAX, SOM en AVG aangekomen in Cassandra 2.2, en GROEP DOOR Aangekomen in 3.10. De kanttekening betreft de reikwijdte, niet de beschikbaarheid.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Beperkt tot één enkele partitie zoals hierboven, is een aggregatie efficiënt. Wanneer deze over de hele tabel wordt uitgevoerd, wordt het een clusterbrede scan, vandaar Cassandra blijft ongeschikt voor ad-hocanalyses en daarom wordt uitgebreide rapportage normaal gesproken uitgesteld naar Spark of een extern magazijn.
Cassandra Waar clausule
In Cassandrais het ophalen van gegevens een gevoelige kwestie. De kolom wordt erin gefilterd Cassandra door een index te maken voor niet-primaire sleutelkolommen.
Syntaxis
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Voorbeeld
- Hier is de momentopname die het ophalen van gegevens uit de Student-tabel laat zien zonder gegevensfiltratie.
SELECT * FROM University.Student;
Er worden twee records opgehaald uit de Student-tabel.
- Hier is de momentopname die het ophalen van gegevens uit Student met gegevensfiltratie laat zien. Er wordt één record opgehaald.
De gegevens worden gefilterd op basis van de kolom 'naam'. Alle records worden opgehaald waarvan de naam gelijk is aan... Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
De regels die bepalen naar welke kolommen een WHERE-clausule mag verwijzen, vloeien rechtstreeks voort uit de primaire sleutel.
- De partitiesleutel Voor een efficiënte zoekopdracht moet het volledige adres worden aangeleverd, omdat het de node identificeert die de gegevens bevat.
- Clusterkolommen kunnen dan worden beperkt, maar alleen in de volgorde waarin ze zijn afgekondigd. Overslaanping Eén ervan wordt afgewezen.
- Bereikvergelijkingen zijn toegestaan op de laatst geraadpleegde clusterkolom, niet op eerdere kolommen.
- Elke andere kolom heeft een secundaire index nodig, die wordt behandeld in de index aanmaken en verwijderen tutorial.
Wanneer een query wordt afgewezen, Cassandra Het suggereert vaak om ALLOW FILTERING toe te voegen. Beschouw dit als een waarschuwing in plaats van een oplossing: het scant elke partitie op elke node, en een schemawijziging is vrijwel altijd de juiste reactie.











