Cassandra Kyselykieli (CQL): Lisää, päivitä ja poista
⚡ Älykäs yhteenveto
Cassandra Kyselykieli käsittelee lisäys-, päivitys-, poisto- ja lukuoperaatioita SQL:ää lähellä olevalla syntaksilla, mutta pohjalla olevalla semantiikalla. Tämä sivu käsittelee kutakin lausetta, lisäys- ja päivitysoperaatioiden yhdistävää upsert-toimintaa sekä WHERE-lauseen todellisia rajoituksia.
Lisää tiedot
Cassandra insert-lause kirjoittaa tiedot sisään Cassandra sarakkeita rivimuodossa. Cassandra Lisää kysely tallentaa vain ne sarakkeet, jotka käyttäjä on antanut. Sinun on välttämättä määritettävä vain ensisijaisen avaimen sarake.
Se ei vie tilaa antamattomille arvoille. Tuloksia ei palauteta lisäyksen jälkeen.
Syntaksi
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
esimerkki
Tässä tilannekuva teloituksesta Cassandra Lisää taulukkokyselyyn, joka lisää yhden tietueen Cassandra pöytä "Opiskelija".
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Kun komento Insert into on suoritettu onnistuneesti Cassandra, yksi rivi lisätään kohtaan Cassandra taulukko Opiskelija, jolla on RollNo 2, nimi Michael, osasto CS ja lukukausi 2.
Tässä on tilannekuva tietokannan nykyisestä tilasta.
Upsert Data
Cassandra ärsyttää. Upsert tarkoittaa sitä Cassandra lisää rivin, jos ensisijaista avainta ei ole jo olemassa, muuten jos ensisijainen avain on jo olemassa, se päivittää kyseisen rivin.
Tällä on käytännön seuraus, joka kannattaa mainita selvästi: INSERT-lauseke ei koskaan ilmoita kaksoisavaimen virheestä, joten vahingossa tehty uudelleenlisäys korvaa olemassa olevan rivin ilman varoitusta. Kun tämä on estettävä, lisää IF NOT EXISTS -lausekkeeseen kevyt transaktio.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Kevyet transaktiot käyttävät konsensuskierrosta replikoiden välillä, joten ne ovat huomattavasti hitaampia kuin normaali kirjoitus ja ne tulisi varata tapauksiin, jotka todella tarvitsevat tarkistusta.
Päivitä tiedot
Cassandra Päivityskyselyä käytetään tietojen päivittämiseen Cassandra taulukko. Jos tuloksia ei palauteta tietojen päivityksen jälkeen, se tarkoittaa, että tiedot on päivitetty onnistuneesti, muuten palautetaan virhe. Sarakearvoja muutetaan "Set"-lauseessa, kun tiedot suodatetaan "Where"-lauseella.
Syntaksi
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
esimerkki
Tässä on kuvakaappaus, joka näyttää tietokannan tilan ennen tietojen päivittämistä.
Tässä tilannekuva teloituksesta Cassandra Päivitä-komento, joka päivittää opiskelijataulukon tietueen.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Päivityskyselyn onnistuneen suorittamisen jälkeen sisään Cassandra 'Päivitä opiskelija', opiskelijan nimi muutetaan 'Clark':sta 'Hayden'iksi, jolla on rollno 1.
Tässä on kuvakaappaus, joka näyttää tietokannan tilan tietojen päivityksen jälkeen.
Upsert-käyttäytymisen vuoksi UPDATE-komento, joka kohdistuu olemattomaan ensisijaiseen avaimeen, luo rivin epäonnistumisen sijaan.
Cassandra Poista tiedot
Komento 'Poista' poistaa koko rivin tai joitakin sarakkeita taulukosta Opiskelija. Kun tiedot poistetaan, niitä ei poisteta taulukosta välittömästi. Sen sijaan poistetut tiedot merkitään hautakivellä ja poistetaan tiivistyksen jälkeen.
Syntaksi
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Ylempi Cassandra Poista rivin syntaksi poistaa yhden tai useampia rivejä riippuen datan suodatuksesta where-lauseessa.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Yllä oleva syntaksi poistaa joitain sarakkeita taulukosta.
esimerkki
Tässä on tilannekuva, joka näyttää tietokannan nykyisen tilan ennen tietojen poistamista.
Tässä on tilannekuva komennosta, joka poistaa yhden rivin taulukosta Opiskelija.
DELETE FROM University.Student WHERE rollno = 1;
CQL Delete -komennon onnistuneen suorittamisen jälkeen Student-taulukosta poistetaan yksi rivi, jossa rollno-arvona on 1.
Tässä on tilannekuva, joka näyttää tietokannan tilan tietojen poistamisen jälkeen.
Hautakivet säilyvät oletusarvoisesti kymmenen päivää eli gc_grace_seconds, joten poiston aikana offline-tilassa oleva solmu ei voi herättää riviä henkiin palatessaan. Suurten levymäärien poistaminen jättää siis merkkejä, joiden ohi jokaisen seuraavan lukukerran on skannattava.
Mitä Cassandra ei tue
CQL lainaa SQL-syntaksia, mutta ei relaatiolaskennan suoritusmallia, joten useat tutut rakenteet käyttäytyvät eri tavalla tai puuttuvat kokonaan.
- CQL ei tue taulukoiden välisiä liitoksia. Liittyvät tiedot on denormalisoitava yhdeksi taulukoksi kirjoitusvaiheessa.
- CQL ei tue OR-ehtoja WHERE-lausekkeessa. Käytä IN-lauseketta yhdessä sarakkeessa tai suorita erilliset kyselyt.
- CQL ei tue UNION- tai INTERSECT-operaattoreita.
- Muita kuin ensisijaisia avaimia ei voida suodattaa, ennen kuin niille on luotu indeksi.
- Suurempi kuin- ja pienempi kuin -vertailut koskevat vain klusterointisarakkeita, koska vain ne lajitellaan levyllä.
- Kuvioiden yhteensovitus LIKE-funktiolla vaatii SASI-indeksin, eikä sitä voi käyttää tavallisissa sarakkeissa.
Yksi pitkäaikainen väite kaipaa korjausta. Kokonaisfunktioita tuetaan: LASKU, MIN, MAX, SUMMA ja AVG saapui Cassandra 2.2 ja GROUP BY saapui 3.10. Varoitus koskee pikemminkin laajuutta kuin saatavuutta.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Yhteen osioon rajoitettuna, kuten yllä, aggregaatti on tehokas. Koko taulukon läpi ajettuna siitä tulee klusterinlaajuinen skannaus, minkä vuoksi Cassandra ei sovellu ad hoc -analytiikkaan ja miksi raskas raportointi yleensä siirretään Spark tai ulkoiseen varastoon.
Cassandra Missä lauseke
In Cassandra, tietojen haku on arkaluonteinen asia. Pylväs suodatetaan sisään Cassandra luomalla indeksin ei-ensisijaisiin avainsarakkeisiin.
Syntaksi
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
esimerkki
- Tässä on tilannekuva, joka näyttää tietojen haun opiskelijataulukosta ilman tietojen suodatusta.
SELECT * FROM University.Student;
Opiskelijataulukosta haetaan kaksi tietuetta.
- Tässä on tilannekuva, joka näyttää tietojen haun Studentilta tietojen suodatuksella. Yksi tietue haetaan.
Tiedot suodatetaan nimisarakkeen mukaan. Kaikki tietueet, joiden nimi on yhtä suuri kuin Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Säännöt, jotka määräävät, mihin sarakkeisiin WHERE-lauseke voi viitata, seuraavat suoraan perusavaimesta.
- osioavain on annettava kokonaisuudessaan mitä tahansa tehokasta kyselyä varten, koska se tunnistaa dataa sisältävän solmun.
- Clustersarakkeita voidaan sitten rajoittaa, mutta vain siinä järjestyksessä kuin ne on ilmoitettu. Ohitaping yksi hylätään.
- Alueiden vertailut ovat sallittuja viimeksi viitatussa klusterointisarakkeessa, eivät aiemmissa.
- mitään toinen sarake tarvitsee toissijaisen indeksin, jota käsitellään kohdassa luo ja poista indeksi opetusohjelma.
Kun kysely hylätään, Cassandra ehdottaa usein ALLOW FILTERING -komennon lisäämistä. Pidä sitä varoituksena pikemminkin kuin korjauksena: se skannaa jokaisen osion jokaisella solmulla, ja skeeman muutos on lähes aina oikea vastaus.











