Cassandra Query Language (CQL): Sett inn, oppdater og slett
โก Smart oppsummering
Cassandra Query Language hรฅndterer insert-, update-, delete- og read-operasjoner med en syntaks som ligner pรฅ SQL, men med annen semantikk under. Denne siden dekker hver setning, upsert-oppfรธrselen som slรฅr sammen insert og update, og de virkelige begrensningene til WHERE-klausulen.

Sett inn data
Ocuco Cassandra insert statement skriver data inn Cassandra kolonner i radform. Cassandra insert query vil lagre bare de kolonnene som er gitt av brukeren. Du mรฅ nรธdvendigvis spesifisere bare primรฆrnรธkkelkolonnen.
Det vil ikke ta plass for ikke gitte verdier. Ingen resultater returneres etter innsetting.
syntax
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Eksempel
Her er รธyeblikksbildet av de henrettede Cassandra Sett inn i tabellspรธrring som vil sette inn รฉn post Cassandra tabellen 'Student'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Etter vellykket utfรธrelse av kommandoen Sett inn i Cassandra, vil รฉn rad settes inn i Cassandra tabell Student med RollNo 2, Navn Michael, avd CS og Semester 2.
Her er รธyeblikksbildet av gjeldende databasetilstand.
Upsert Data
Cassandra opprรธrer. Upsert betyr det Cassandra vil sette inn en rad hvis en primรฆrnรธkkel ikke allerede eksisterer, ellers hvis primรฆrnรธkkelen allerede eksisterer, vil den oppdatere den raden.
Dette har en praktisk konsekvens som er verdt รฅ si tydelig: en INSERT rapporterer aldri en duplikatnรธkkelfeil, sรฅ en utilsiktet ny innsetting overskriver den eksisterende raden uten forvarsel. Nรฅr dette mรฅ forhindres, legg til IF NOT EXISTS for รฅ gjรธre setningen til en lettvektstransaksjon.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Lette transaksjoner bruker en konsensusrunde pรฅ tvers av replikaer, sรฅ de er betydelig tregere enn en vanlig skriving og bรธr reserveres for tilfeller som virkelig trenger sjekken.
Oppdater data
Ocuco Cassandra Oppdateringsspรธrring brukes til รฅ oppdatere dataene i Cassandra bord. Hvis ingen resultater returneres etter oppdatering av data, betyr det at data er vellykket oppdatert, ellers vil en feil returneres. Kolonneverdier endres i 'Set'-leddet mens data filtreres med 'Where'-leddet.
syntax
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Eksempel
Her er skjermbildet som viser databasetilstanden fรธr du oppdaterer data.
Her er รธyeblikksbildet av de henrettede Cassandra Oppdateringskommando som oppdaterer posten i elevtabellen.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Etter vellykket utfรธrelse av oppdateringsspรธrringen i Cassandra 'Oppdater student', studentnavn vil bli endret fra 'Clark' til 'Hayden' som har rollno 1.
Her er skjermbildet som viser databasetilstanden etter oppdatering av data.
Pรฅ grunn av upsert-oppfรธrsel oppretter en UPDATE mot en primรฆrnรธkkel som ikke finnes raden i stedet for รฅ mislykkes.
Cassandra Slett data
Kommandoen 'Slett' fjerner en hel rad eller noen kolonner fra tabellen Student. Nรฅr data slettes, slettes de ikke umiddelbart fra tabellen. I stedet merkes slettede data med en gravstein og fjernes etter komprimering.
syntax
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Ovennevnte Cassandra slette radsyntaks vil slette รฉn eller flere rader avhengig av datafiltrering i where-klausulen.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Syntaksen ovenfor vil slette noen kolonner fra tabellen.
Eksempel
Her er รธyeblikksbildet som viser gjeldende databasestatus fรธr du sletter data.
Her er รธyeblikksbildet av kommandoen som vil fjerne รฉn rad fra tabellen Student.
DELETE FROM University.Student WHERE rollno = 1;
Etter vellykket utfรธrelse av CQL Delete-kommandoen, vil รฉn rad bli slettet fra tabellen Student der rollno-verdien er 1.
Her er รธyeblikksbildet som viser databasetilstanden etter sletting av data.
Gravsteiner overlever i gc_grace_seconds, ti dager som standard, slik at en node som er offline under slettingen ikke kan gjenopplive raden nรฅr den returnerer. Sletting av store volumer etterlater derfor markรธrer som hver pรฅfรธlgende lesning mรฅ skanne forbi.
Hva Cassandra stรธtter ikke
CQL lรฅner SQL-syntaks, men ikke den relasjonelle utfรธrelsesmodellen, sรฅ flere kjente konstruksjoner oppfรธrer seg annerledes eller er fravรฆrende.
- CQL stรธtter ikke koblinger mellom tabeller. Relaterte data mรฅ denormaliseres til รฉn tabell ved skriving.
- CQL stรธtter ikke OR-betingelser i en WHERE-klausul. Bruk IN pรฅ รฉn kolonne, eller kjรธr separate spรธrringer.
- CQL stรธtter ikke UNION eller INTERSECT.
- Kolonner som ikke er primรฆrnรธkkelkolonner kan ikke filtreres fรธr det finnes en indeks pรฅ dem.
- Sammenligninger av stรธrre enn og mindre enn gjelder bare for klyngekolonner, fordi bare de sorteres pรฅ disken.
- Mรธnstersamsvar med LIKE krever en SASI-indeks og er ikke tilgjengelig pรฅ vanlige kolonner.
รn langvarig pรฅstand mรฅ korrigeres. Aggregerte funksjoner stรธttes: ANTALL, MIN, MAKS, SUM og AVG ankom i Cassandra 2.2, og GRUPPE AV kom i 3.10. Forbeholdet er omfang snarere enn tilgjengelighet.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Begrenset til en enkelt partisjon som ovenfor, er et aggregat effektivt. Kjรธres det over hele tabellen, blir det en klyngeomfattende skanning, og det er derfor Cassandra fortsatt uegnet for ad hoc-analyse, og hvorfor tung rapportering vanligvis presses til Spark eller et eksternt lager.
Cassandra Hvor klausul
In Cassandra, er datainnhenting et sensitivt problem. Kolonnen filtreres inn Cassandra ved รฅ lage en indeks pรฅ ikke-primรฆre nรธkkelkolonner.
syntax
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Eksempel
- Her er รธyeblikksbildet som viser datahentingen fra Studenttabellen uten datafiltrering.
SELECT * FROM University.Student;
To poster hentes fra Studenttabell.
- Her er รธyeblikksbildet som viser datahentingen fra Student med datafiltrering. รn post hentes.
Data filtreres etter navnekolonne. Alle poster som har navn lik Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Reglene som styrer hvilke kolonner en WHERE-klausul kan referere til, fรธlger direkte fra primรฆrnรธkkelen.
- Ocuco partisjonsnรธkkel mรฅ oppgis i sin helhet for enhver effektiv spรธrring, fordi den identifiserer noden som inneholder dataene.
- Clusterkolonner kan da begrenses, men bare i den rekkefรธlgen de ble erklรฆrt. Hopp overping รฉn blir avvist.
- Rekkeviddesammenligninger er tillatt pรฅ den siste klyngekolonnen det refereres til, ikke pรฅ tidligere.
- Noen annen kolonne trenger en sekundรฆrindeks, dekket i opprette og slette indeks opplรฆringen.
Nรฅr en forespรธrsel blir avvist, Cassandra foreslรฅr ofte รฅ legge til ALLOW FILTERING. Betrakt det som en advarsel snarere enn en lรธsning: den skanner hver partisjon pรฅ hver node, og en skjemaendring er nesten alltid den riktige responsen.










