Cassandra Linguaggio di interrogazione (CQL): Inserimento, aggiornamento ed eliminazione
⚡ Riepilogo intelligente
Cassandra Il linguaggio Query gestisce le operazioni di inserimento, aggiornamento, eliminazione e lettura con una sintassi simile a SQL, ma con una semantica sottostante differente. Questa pagina illustra ciascuna istruzione, il comportamento di upsert che unisce inserimento e aggiornamento e i limiti reali della clausola WHERE.

Inserisci dati
Migliori Cassandra l'istruzione insert scrive i dati Cassandra colonne sotto forma di riga. Cassandra la query di inserimento memorizzerà solo le colonne fornite dall'utente. Devi necessariamente specificare solo la colonna della chiave primaria.
Non occuperà spazio per valori non specificati. Nessun risultato viene restituito dopo l'inserimento.
Sintassi
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Esempio
Ecco lo snapshot dell'eseguito Cassandra Inserisci nella query della tabella in cui verrà inserito un record Cassandra tabella 'Studente'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Dopo aver eseguito con successo il comando Inserisci in Cassandra, una riga verrà inserita nel file Cassandra tabella Studente con RollNo 2, Nome Michael, dipartimento CS e Semestre 2.
Ecco l'istantanea dello stato corrente del database.
Aggiorna dati
Cassandra si sconvolge. Upsert significa questo Cassandra inserirà una riga se non esiste già una chiave primaria, altrimenti se la chiave primaria esiste già, aggiornerà quella riga.
Ciò ha una conseguenza pratica che vale la pena di esplicitare: un'istruzione INSERT non segnala mai un errore di chiave duplicata, quindi un reinserimento accidentale sovrascrive la riga esistente senza preavviso. Quando è necessario evitarlo, si aggiunge IF NOT EXISTS per rendere l'istruzione una transazione leggera.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Le transazioni leggere utilizzano un round di consenso tra le repliche, quindi sono considerevolmente più lente di una normale scrittura e dovrebbero essere riservate ai casi in cui il controllo è effettivamente necessario.
Aggiorna dati
Migliori Cassandra La query di aggiornamento viene utilizzata per aggiornare i dati nel file Cassandra tavolo. Se non vengono restituiti risultati dopo l'aggiornamento dei dati, significa che i dati sono stati aggiornati correttamente, altrimenti verrà restituito un errore. I valori delle colonne vengono modificati nella clausola 'Set' mentre i dati vengono filtrati con la clausola 'Where'.
Sintassi
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Esempio
Ecco lo screenshot che mostra lo stato del database prima dell'aggiornamento dei dati.
Ecco lo snapshot dell'eseguito Cassandra Comando Aggiorna che aggiorna il record nella tabella Studenti.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Dopo l'esecuzione corretta della query di aggiornamento in Cassandra "Aggiorna studente", il nome dello studente verrà cambiato da "Clark" a "Hayden" che ha il numero 1.
Ecco lo screenshot che mostra lo stato del database dopo l'aggiornamento dei dati.
A causa del comportamento dell'operazione di upsert, un'operazione di UPDATE su una chiave primaria inesistente crea la riga anziché fallire.
Cassandra Elimina dati
Il comando 'Elimina' rimuove un'intera riga o alcune colonne dalla tabella Studente. Quando i dati vengono eliminati, non vengono eliminati immediatamente dalla tabella. Invece i dati cancellati vengono contrassegnati con una pietra tombale e vengono rimossi dopo la compattazione.
Sintassi
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Quanto sopra Cassandra la sintassi della riga delete eliminerà una o più righe a seconda del filtraggio dei dati nella clausola where.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
La sintassi precedente eliminerà alcune colonne dalla tabella.
Esempio
Ecco lo snapshot che mostra lo stato corrente del database prima dell'eliminazione dei dati.
Ecco lo snapshot del comando che rimuoverà una riga dalla tabella Student.
DELETE FROM University.Student WHERE rollno = 1;
Dopo la corretta esecuzione del comando CQL Delete, verrà eliminata una riga dalla tabella Student in cui il valore di rollno è 1.
Ecco lo snapshot che mostra lo stato del database dopo l'eliminazione dei dati.
Le lapidi rimangono per gc_grace_seconds, ovvero dieci giorni per impostazione predefinita, in modo che un nodo offline durante l'eliminazione non possa ripristinare la riga al suo ritorno. L'eliminazione di volumi di grandi dimensioni lascia quindi dei marcatori che ogni successiva operazione di lettura deve ignorare.
Che Cassandra non supporta
CQL prende in prestito la sintassi SQL ma non il modello di esecuzione relazionale, quindi diverse strutture familiari si comportano in modo diverso o sono assenti.
- CQL non supporta le join tra tabelle. I dati correlati devono essere denormalizzati in un'unica tabella al momento della scrittura.
- CQL non supporta le condizioni OR nelle clausole WHERE. Utilizza IN su una singola colonna oppure esegui query separate.
- CQL non supporta UNION o INTERSECT.
- Le colonne non chiave primaria non possono essere filtrate finché non esiste un indice su di esse.
- I confronti "maggiore di" e "minore di" si applicano solo alle colonne di clustering, perché solo queste vengono ordinate su disco.
- La corrispondenza di pattern con LIKE richiede un indice SASI e non è disponibile sulle colonne ordinarie.
Una vecchia affermazione necessita di una correzione. Le funzioni aggregate sono supportate: CONTA, MIN, MAX, SOMMA e AVG arrivato a Cassandra 2.2, e RAGGRUPPA PER arrivato nella versione 3.10. Il problema riguarda la portata, non la disponibilità.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Limitata a una singola partizione come sopra, un'aggregazione è efficiente. Eseguita sull'intera tabella diventa una scansione a livello di cluster, motivo per cui Cassandra rimane inadatto per analisi ad hoc ed è per questo che la reportistica pesante viene solitamente rimandata Spark o un magazzino esterno.
Cassandra Dove Clausola
In Cassandra, il recupero dei dati è una questione delicata. La colonna viene filtrata Cassandra creando un indice su colonne di chiave non primaria.
Sintassi
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Esempio
- Ecco l'istantanea che mostra il recupero dei dati dalla tabella Studente senza filtraggio dei dati.
SELECT * FROM University.Student;
Vengono recuperati due record dalla tabella Studenti.
- Ecco l'istantanea che mostra il recupero dei dati da Student con il filtraggio dei dati. Viene recuperato un record.
I dati vengono filtrati in base alla colonna del nome. Vengono recuperati tutti i record che hanno nome uguale a Guru99
SELECT * FROM University.Student WHERE name = 'Guru99';
Le regole che stabiliscono a quali colonne può fare riferimento una clausola WHERE derivano direttamente dalla chiave primaria.
- Migliori chiave di partizione Deve essere fornito per intero per qualsiasi query efficiente, poiché identifica il nodo che contiene i dati.
- Clustercolonne possono quindi essere limitati, ma solo nell'ordine in cui sono stati dichiarati.ping uno viene rifiutato.
- I confronti di intervallo sono consentiti sull'ultima colonna di clustering a cui si fa riferimento, non su quelle precedenti.
- Qualsiasi altra colonna necessita di un indice secondario, trattato nel crea e elimina indice tutorial.
Quando una query viene rifiutata, Cassandra Spesso viene suggerito di aggiungere ALLOW FILTERING. Consideratelo un avvertimento piuttosto che una soluzione: il sistema analizza ogni partizione su ogni nodo e una modifica dello schema è quasi sempre la risposta corretta.










