Cassandra Päringukeel (CQL): sisestamine, värskendamine ja kustutamine
⚡ Nutikas kokkuvõte
Cassandra Päringukeel (Queling Language) käsitleb lisamis-, värskendamis-, kustutamis- ja lugemisoperatsioone SQL-ile lähedase süntaksiga, kuid erineva semantikaga. See leht käsitleb iga lauset, lisamis- ja värskendamisoperatsioone ühendavat upsert-käitumist ning WHERE-klausli tegelikke piiranguid.

Sisesta andmed
. Cassandra insert lause kirjutab andmed sisse Cassandra veerud rea kujul. Cassandra sisestamise päring salvestab ainult need veerud, mille kasutaja on andnud. Peate tingimata määrama ainult primaarvõtme veeru.
Andmata väärtuste jaoks ei võta see ruumi. Pärast sisestamist tulemusi ei tagastata.
SĂĽntaks
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Näide
Siin on hetktõmmis hukatust Cassandra Sisestage tabelipäring, mis lisab ühe kirje Cassandra tabel "Õpilane".
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Pärast käsu Insert into edukat täitmist Cassandra, lisatakse üks rida Cassandra tabel Õpilane rollNo 2, nimi Michael, osakonna CS ja semester 2.
Siin on hetktõmmis praegusest andmebaasi olekust.
Upsert Data
Cassandra ajab närvi. Upsert tähendab seda Cassandra lisab rea, kui primaarvõtit pole juba olemas, vastasel juhul kui primaarvõti on juba olemas, värskendab see seda rida.
Sellel on praktiline tagajärg, mida tasub selgelt välja tuua: INSERT ei anna kunagi teada duplikaatvõtme veast, seega kirjutab juhuslik uuesti sisestamine olemasoleva rea ​​hoiatuseta üle. Kui seda on vaja vältida, lisage IF NOT EXISTS, et muuta lause kergeks tehinguks.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Kerged tehingud kasutavad koopiate vahel konsensusvooru, seega on need tavalisest kirjutamisest oluliselt aeglasemad ja neid tuleks kasutada ainult juhtudel, kus kontroll on tõesti vajalik.
Värskenda andmeid
. Cassandra Värskenduspäringut kasutatakse andmete värskendamiseks Cassandra tabel. Kui pärast andmete värskendamist tulemusi ei tagastata, tähendab see, et andmed on edukalt värskendatud, vastasel juhul tagastatakse tõrge. Veergude väärtusi muudetakse klauslis „Määra”, samal ajal kui andmeid filtreeritakse klausli „Kuhu” abil.
SĂĽntaks
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Näide
Siin on ekraanipilt, mis näitab andmebaasi olekut enne andmete värskendamist.
Siin on hetktõmmis hukatust Cassandra Värskenduskäsk, mis värskendab õpilase tabelis olevat kirjet.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Pärast värskenduspäringu edukat täitmist Cassandra „Uuenda õpilast”, õpilase nimi muudetakse nimest „Clark” nimeks „Hayden”, millel on rollno 1.
Siin on ekraanipilt, mis näitab andmebaasi olekut pärast andmete värskendamist.
Upsert-käitumise tõttu loob UPDATE primaarvõtme suhtes, mida pole olemas, rea, mitte ei nurju.
Cassandra Kustuta andmed
Käsk "Kustuta" eemaldab tabelist terve rea või mõned veerud. Andmete kustutamisel ei kustutata neid tabelist kohe. Selle asemel märgitakse kustutatud andmed hauakiviga ja eemaldatakse pärast tihendamist.
SĂĽntaks
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Ülaltoodud Cassandra rea kustutamise süntaks kustutab ühe või mitu rida olenevalt andmete filtreerimisest kus-klauslis.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Ülaltoodud süntaks kustutab tabelist mõned veerud.
Näide
Siin on hetktõmmis, mis näitab praegust andmebaasi olekut enne andmete kustutamist.
Siin on hetktõmmis käsust, mis eemaldab tabelist Õpilane ühe rea.
DELETE FROM University.Student WHERE rollno = 1;
Pärast CQL Delete käsu edukat käivitamist kustutatakse tabelist Student üks rida, kus rullnumbri väärtus on 1.
Siin on hetktõmmis, mis näitab andmebaasi olekut pärast andmete kustutamist.
Hauakivid jäävad ellu gc_grace_seconds ehk vaikimisi kümme päeva, seega ei saa kustutamise ajal võrguühenduseta sõlm rida naasmisel taastada. Suurte köidete kustutamine jätab seega markerid, millest iga järgnev lugemine peab mööda skannima.
M Cassandra ei toeta
CQL laenab SQL-süntaksit, kuid mitte relatsioonilist teostusmudelit, seega käituvad mitmed tuttavad konstruktsioonid erinevalt või puuduvad.
- CQL ei toeta tabelitevahelisi liitmisi. Seotud andmed tuleb kirjutamise ajal denormaliseerida ĂĽheks tabeliks.
- CQL ei toeta WHERE-klauslis OR-tingimusi. Kasutage IN-tingimusi ühel veerul või käivitage eraldi päringud.
- CQL ei toeta UNIONi ega INTERSECTi.
- Mitte-primaarvõtme veerge ei saa filtreerida enne, kui neile on indeks loodud.
- Suurem kui ja väiksem kui võrdlused kehtivad ainult klastrite veergude puhul, kuna kettal sorteeritakse ainult neid.
- Mustrite sobitamine funktsiooniga LIKE nõuab SASI indeksit ja see pole tavaliste veergude puhul saadaval.
Üks pikaajaline väide vajab parandamist. Toetatud on koondfunktsioonid: LOEND, MIN, MAX, SUM ja AVG saabus Cassandra 2.2 ja GROUP BY saabus 3.10. Hoiatus seisneb pigem ulatuses kui saadavuses.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Nagu eespool kirjeldatud, on agregaat efektiivne, kui see on piiratud ühe partitsiooniga. Kui see käivitatakse üle kogu tabeli, saab sellest klastriülene skaneering, mistõttu Cassandra jääb ad hoc analüüsi jaoks sobimatuks ja miks mahukas aruandlus tavaliselt suunatakse Spark või välisest laost.
Cassandra Kui klausel
In Cassandra, on andmete hankimine tundlik teema. Kolonn filtreeritakse sisse Cassandra luues indeksi mittepõhistele võtmete veergudele.
SĂĽntaks
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Näide
- Siin on hetktõmmis, mis näitab andmete väljavõtmist õpilase tabelist ilma andmete filtreerimiseta.
SELECT * FROM University.Student;
Õpilase tabelist leitakse kaks kirjet.
- Siin on hetktõmmis, mis näitab andmete väljavõtmist õpilasest andmete filtreerimisega. Otsitakse üks kirje.
Andmeid filtreeritakse nimeveeru järgi. Kõik kirjed, mille nimi on võrdne nimega, leitakse. Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Reeglid, mis määravad, millistele veergudele WHERE-klausel viidata võib, tulenevad otse primaarvõtmest.
- . partitsioonivõti tuleb iga efektiivse päringu jaoks täielikult esitada, kuna see identifitseerib andmeid hoidva sõlme.
- Clusterveergude võib seejärel piirata, aga ainult selles järjekorras, milles need deklareeriti. Jäta vaheleping üks lükatakse tagasi.
- Vahemiku võrdlused on lubatud viimasel viidatud klastriveerul, mitte varasematel.
- mistahes teine ​​veerg vajab teisest indeksit, mida käsitletakse jaotises indeksi loomine ja eemaldamine juhendaja.
Kui päring lükatakse tagasi, Cassandra soovitab sageli lisada käsu ALLOW FILTERING. Käsitle seda pigem hoiatusena kui parandusena: see skannib iga partitsiooni igal sõlmel ja skeemi muutmine on peaaegu alati õige vastus.










