Cassandra Język zapytań (CQL): wstawianie, aktualizowanie i usuwanie
⚡ Inteligentne podsumowanie
Cassandra Język zapytań obsługuje operacje wstawiania, aktualizowania, usuwania i odczytu za pomocą składni zbliżonej do SQL, ale z inną semantyką. Ta strona omawia każdą instrukcję, działanie upsert, które łączy wstawianie i aktualizowanie, oraz rzeczywiste ograniczenia klauzuli WHERE.

Wstaw dane
Cassandra instrukcja wstaw zapisuje dane Cassandra kolumny w formie wierszy. Cassandra zapytanie wstawiające zapisze tylko te kolumny, które podał użytkownik. Musisz koniecznie określić tylko kolumnę klucza podstawowego.
Nie zajmie miejsca na nie podane wartości. Po wstawieniu nie są zwracane żadne wyniki.
Składnia
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Przykład
Oto migawka wykonanego Cassandra Wstaw do tabeli zapytanie, które wstawi jeden rekord Cassandra tabela „Student”.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Po pomyślnym wykonaniu polecenia Wstaw do Cassandra, jeden wiersz zostanie wstawiony do Cassandra tabela Student z rolką nr 2, imieniem Michael, dział CS i semestr 2.
Oto migawka bieżącego stanu bazy danych.
Wstaw dane
Cassandra podnosi. Upsert to oznacza Cassandra wstawi wiersz, jeśli klucz podstawowy jeszcze nie istnieje; w przeciwnym razie, jeśli klucz podstawowy już istnieje, wiersz zostanie zaktualizowany.
Ma to praktyczną konsekwencję, którą warto wyraźnie podkreślić: polecenie INSERT nigdy nie zgłasza błędu duplikatu klucza, więc przypadkowe ponowne wstawienie nadpisuje istniejący wiersz bez ostrzeżenia. W razie potrzeby należy temu zapobiec, dodając polecenie IF NOT EXISTS, aby uczynić instrukcję lekką transakcją.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Lekkie transakcje wykorzystują rundę konsensusu w obrębie replik, więc są znacznie wolniejsze od zwykłego zapisu i powinny być zarezerwowane dla przypadków, w których sprawdzenie jest naprawdę konieczne.
Aktualizować dane
Cassandra Zapytanie aktualizacyjne służy do aktualizacji danych w pliku Cassandra stół. Jeśli po zaktualizowaniu danych nie zostaną zwrócone żadne wyniki, oznacza to, że dane zostały pomyślnie zaktualizowane, w przeciwnym razie zostanie zwrócony błąd. Wartości kolumn są zmieniane w klauzuli „Set”, podczas gdy dane są filtrowane za pomocą klauzuli „Where”.
Składnia
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Przykład
Oto zrzut ekranu przedstawiający stan bazy danych przed aktualizacją danych.
Oto migawka wykonanego Cassandra Polecenie aktualizacji aktualizujące rekord w tabeli Student.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Po pomyślnym wykonaniu zapytania aktualizacyjnego w Cassandra „Aktualizuj ucznia”, imię i nazwisko ucznia zostanie zmienione z „Clark” na „Hayden”, którego rolka ma numer 1.
Oto zrzut ekranu przedstawiający stan bazy danych po aktualizacji danych.
Ze względu na zachowanie funkcji upsert, polecenie UPDATE dotyczące nieistniejącego klucza podstawowego tworzy wiersz, zamiast zakończyć się niepowodzeniem.
Cassandra Usunąć dane
Polecenie „Usuń” usuwa cały wiersz lub niektóre kolumny z tabeli Student. Usunięte dane nie są natychmiast usuwane z tabeli. Zamiast tego usunięte dane są oznaczane nagrobkiem i usuwane po zagęszczeniu.
Składnia
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Powyżej Cassandra Składnia usuwania wierszy usunie jeden lub więcej wierszy, w zależności od filtrowania danych w klauzuli Where.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Powyższa składnia spowoduje usunięcie niektórych kolumn z tabeli.
Przykład
Oto migawka pokazująca bieżący stan bazy danych przed usunięciem danych.
Oto migawka polecenia, które usunie jeden wiersz z tabeli Student.
DELETE FROM University.Student WHERE rollno = 1;
Po pomyślnym wykonaniu polecenia CQL Delete, jeden wiersz zostanie usunięty z tabeli Student, której wartość rollno wynosi 1.
Oto migawka pokazująca stan bazy danych po usunięciu danych.
Nagrobki są zachowywane przez gc_grace_seconds, czyli domyślnie dziesięć dni, więc węzeł offline podczas usuwania nie może wskrzesić wiersza po jego usunięciu. Usuwanie dużych woluminów pozostawia zatem znaczniki, które każdy kolejny odczyt musi przeskanować.
Co Cassandra nie wspiera
Język CQL zapożycza składnię języka SQL, ale nie czerpie z modelu wykonywania relacji, dlatego też kilka znanych konstrukcji zachowuje się inaczej lub w ogóle nie występuje.
- Język CQL nie obsługuje połączeń między tabelami. Powiązane dane muszą zostać zdenormalizowane do jednej tabeli w momencie zapisu.
- Język CQL nie obsługuje warunków OR w klauzuli WHERE. Użyj warunku IN w pojedynczej kolumnie lub uruchom osobne zapytania.
- CQL nie obsługuje UNION ani INTERSECT.
- Kolumn niebędących kluczami podstawowymi nie można filtrować, dopóki nie zostanie utworzony dla nich indeks.
- Porównania „większe” i „mniejsze” mają zastosowanie wyłącznie do kolumn klastrowanych, ponieważ tylko takie kolumny są sortowane na dysku.
- Dopasowywanie wzorców za pomocą LIKE wymaga indeksu SASI i nie jest dostępne w zwykłych kolumnach.
Jedno długo powtarzane roszczenie wymaga sprostowania. Obsługiwane są funkcje agregujące: LICZ, MIN, MAX, SUMA i AVG przybyć Cassandra 2.2 i GRUPUJ WEDŁUG pojawiło się w wersji 3.10. Zastrzeżenie dotyczy zakresu, a nie dostępności.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Ograniczony do pojedynczej partycji, jak powyżej, agregat jest wydajny. Przeprowadzony na całej tabeli staje się skanowaniem całego klastra, dlatego Cassandra pozostaje nieodpowiedni do doraźnych analiz i dlaczego zwykle wykonuje się obszerne raportowanie Spark lub magazynu zewnętrznego.
Cassandra Gdzie klauzula
In Cassandra, pobieranie danych jest kwestią delikatną. Kolumna jest filtrowana Cassandra tworząc indeks dla kolumn innych niż klucz podstawowy.
Składnia
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Przykład
- Oto migawka pokazująca pobieranie danych z tabeli Studenta bez filtrowania danych.
SELECT * FROM University.Student;
Z tabeli Studenta pobierane są dwa rekordy.
- Oto migawka pokazująca pobieranie danych od Studenta z filtracją danych. Pobrano jeden rekord.
Dane są filtrowane według kolumny z nazwą. Pobierane są wszystkie rekordy, których nazwa jest równa Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Reguły regulujące, do których kolumn może odwoływać się klauzula WHERE, wynikają bezpośrednio z klucza podstawowego.
- klucz partycji musi zostać podany w całości, aby można było wykonać jakiekolwiek efektywne zapytanie, ponieważ identyfikuje węzeł przechowujący dane.
- Clusterkolumny ing mogą być następnie ograniczone, ale tylko w kolejności, w jakiej zostały zadeklarowane. Pomińping jeden jest odrzucany.
- Porównania zakresów są dozwolone w odniesieniu do ostatniej kolumny klastrowania, do której się odwołujesz, a nie do kolumn wcześniejszych.
- Każdy inna kolumna potrzebuje indeksu wtórnego, objętego tworzenie i usuwanie indeksu poradnik.
Gdy zapytanie zostanie odrzucone, Cassandra Często sugeruje dodanie opcji „Zezwól na filtrowanie”. Potraktuj to jako ostrzeżenie, a nie rozwiązanie: skanuje ona każdą partycję na każdym węźle, a zmiana schematu jest prawie zawsze poprawną odpowiedzią.










