Cassandra Jezik upita (CQL): Umetanje, ažuriranje i brisanje
⚡ Pametni sažetak
Cassandra Jezik upita obrađuje operacije umetanja, ažuriranja, brisanja i čitanja sa sintaksom sličnom SQL-u, ali drugačijom semantikom. Ova stranica pokriva svaku naredbu, ponašanje upsert koje spaja umetanje i ažuriranje te stvarna ograničenja klauzule WHERE.

Umetni podatke
The Cassandra insert izjava upisuje podatke Cassandra stupaca u obliku retka. Cassandra upit za umetanje će pohraniti samo one stupce koje je dao korisnik. Morate nužno navesti samo stupac primarnog ključa.
Neće zauzimati prostor za nezadane vrijednosti. Nakon umetanja ne vraćaju se rezultati.
Sintaksa
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Primjer
Evo snimka strijeljanih Cassandra Upit za umetanje u tablicu koji će umetnuti jedan zapis Cassandra tablica 'Student'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Nakon uspješnog izvođenja naredbe Insert into Cassandra, jedan red će biti umetnut u Cassandra stol Student s RollNo 2, ime Michael, odjel CS i semestar 2.
Ovdje je snimka trenutnog stanja baze podataka.
Upsert Podaci
Cassandra čini upsert. Upsert znači to Cassandra umetnut će redak ako primarni ključ već ne postoji, inače ako primarni ključ već postoji, ažurirat će taj redak.
To ima praktičnu posljedicu koju vrijedi jasno navesti: INSERT nikada ne prijavljuje grešku dupliciranog ključa, pa slučajno ponovno umetanje prepisuje postojeći redak bez upozorenja. Kada se to mora spriječiti, dodajte IF NOT EXISTS kako biste naredbu učinili laganom transakcijom.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Lagane transakcije koriste konsenzusnu rundu među replikama, pa su znatno sporije od normalnog pisanja i trebale bi biti rezervirane za slučajeve kojima je provjera zaista potrebna.
Ažuriranje podataka
The Cassandra Upit za ažuriranje koristi se za ažuriranje podataka u Cassandra stol. Ako se nakon ažuriranja podataka ne vrate nikakvi rezultati, to znači da su podaci uspješno ažurirani, inače će biti vraćena pogreška. Vrijednosti stupaca mijenjaju se u klauzuli 'Set' dok se podaci filtriraju klauzulom 'Where'.
Sintaksa
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Primjer
Ovdje je snimak zaslona koji prikazuje stanje baze podataka prije ažuriranja podataka.
Evo snimka strijeljanih Cassandra Naredba za ažuriranje koja ažurira zapis u tablici učenika.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Nakon uspješnog izvršenja upita za ažuriranje u Cassandra 'Ažuriraj učenika', ime učenika će se promijeniti iz 'Clark' u 'Hayden' koje ima broj 1.
Ovdje je snimak zaslona koji prikazuje stanje baze podataka nakon ažuriranja podataka.
Zbog ponašanja upsert, UPDATE na primarni ključ koji ne postoji stvara redak umjesto da ne uspije.
Cassandra Izbriši podatke
Naredba 'Izbriši' uklanja cijeli redak ili neke stupce iz tablice Student. Kada se podaci izbrišu, ne brišu se odmah iz tablice. Umjesto toga izbrisani podaci označeni su nadgrobnom pločom i uklonjeni su nakon sažimanja.
Sintaksa
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Gore Cassandra sintaksa brisanja reda izbrisat će jedan ili više redaka, ovisno o filtraciji podataka u klauzuli where.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Gornja sintaksa će izbrisati neke stupce iz tablice.
Primjer
Ovdje je snimka koja prikazuje trenutno stanje baze podataka prije brisanja podataka.
Ovdje je snimka naredbe koja će ukloniti jedan red iz tablice Student.
DELETE FROM University.Student WHERE rollno = 1;
Nakon uspješnog izvršenja CQL naredbe Delete, jedan red će biti izbrisan iz tablice Student gdje je vrijednost rollno 1.
Ovdje je snimka koja prikazuje stanje baze podataka nakon brisanja podataka.
Nadgrobni spomenici opstaju gc_grace_seconds, deset dana prema zadanim postavkama, tako da čvor koji je izvan mreže tijekom brisanja ne može oživjeti redak kada se vrati. Brisanje velikih volumena stoga ostavlja markere koje svako sljedeće čitanje mora skenirati.
Što Cassandra ne podržava
CQL posuđuje SQL sintaksu, ali ne i relacijski model izvršavanja, pa se nekoliko poznatih konstrukata ponaša drugačije ili ih uopće nema.
- CQL ne podržava spajanja između tablica. Povezani podaci moraju se denormalizirati u jednu tablicu prilikom pisanja.
- CQL ne podržava OR uvjete u WHERE klauzuli. Koristite IN na jednom stupcu ili pokrenite odvojene upite.
- CQL ne podržava UNION ili INTERSECT.
- Stupci koji nisu primarni ključ ne mogu se filtrirati dok na njima ne postoji indeks.
- Usporedbe veće od i manje od primjenjuju se samo na klasteriranje stupaca, jer su samo oni sortirani na disku.
- Uspoređivanje uzoraka s LIKE zahtijeva SASI indeks i nije dostupno na običnim stupcima.
Jedan dugogodišnji zahtjev treba ispraviti. Podržane su agregatne funkcije: BROJ, MIN, MAX, ZBROJ i AVG je stigao Cassandra 2.2 i GROUP BY stigao u 3.10. Upozorenje je opseg, a ne dostupnost.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Ograničen na jednu particiju kao gore, agregacija je učinkovita. Provođenjem kroz cijelu tablicu postaje skeniranje cijelog klastera, zbog čega Cassandra ostaje neprikladan za ad hoc analitiku i zašto se opsežno izvještavanje obično preusmjerava na Spark ili vanjsko skladište.
Cassandra Gdje je klauzula
In Cassandra, dohvaćanje podataka je osjetljivo pitanje. Stupac je filtriran Cassandra stvaranjem indeksa na stupcima neprimarnog ključa.
Sintaksa
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Primjer
- Ovdje je snimka koja prikazuje dohvaćanje podataka iz tablice učenika bez filtriranja podataka.
SELECT * FROM University.Student;
Dva zapisa se dohvaćaju iz tablice Student.
- Ovdje je snimka koja prikazuje dohvaćanje podataka od Studenta s filtriranjem podataka. Pronađen je jedan zapis.
Podaci se filtriraju prema stupcu naziva. Dohvaćaju se svi zapisi čiji je naziv jednak Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Pravila koja određuju na koje stupce se WHERE klauzula može pozivati proizlaze izravno iz primarnog ključa.
- The ključ particije mora se navesti u cijelosti za bilo koji učinkovit upit, jer identificira čvor koji sadrži podatke.
- Clusterstupci mogu se tada ograničiti, ali samo redoslijedom kojim su deklarirani. Preskočiping jedan je odbijen.
- Usporedbe raspona dopuštene su na posljednjem referenciranom stupcu klasteriranja, ne na ranijim.
- bilo koji drugi stupac potreban je sekundarni indeks, obuhvaćen u stvaranje i brisanje indeksa udžbenik.
Kada je upit odbijen, Cassandra često predlaže dodavanje ALLOW FILTERING. To tretirajte kao upozorenje, a ne kao rješenje: skenira svaku particiju na svakom čvoru, a promjena sheme je gotovo uvijek ispravan odgovor.










