Cassandra Sorgu Dili (CQL): Ekleme, Güncelleme ve Silme
⚡ Akıllı Özet
Cassandra Sorgu Dili, SQL'e yakın bir sözdizimiyle ancak altta yatan farklı anlambilimle ekleme, güncelleme, silme ve okuma işlemlerini ele alır. Bu sayfa, her bir ifadeyi, ekleme ve güncellemeyi birleştiren upsert davranışını ve WHERE yan tümcesinin gerçek sınırlarını ele almaktadır.
Veri Girin
MKS Cassandra insert ifadesi veriyi içine yazar Cassandra satır biçimindeki sütunlar. Cassandra ekleme sorgusu yalnızca kullanıcı tarafından verilen sütunları saklar. Yalnızca birincil anahtar sütununu mutlaka belirtmeniz gerekir.
Verilmeyen değerler için yer kaplamaz. Eklemeden sonra hiçbir sonuç döndürülmez.
Sözdizimi
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Örnek E-posta
İşte idamın görüntüsü Cassandra Bir kayıt ekleyecek tablo sorgusuna ekleyin Cassandra 'Öğrenci' tablosu.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
İçine ekle komutunun başarılı bir şekilde yürütülmesinden sonra Cassandra, bir satır eklenecek Cassandra Tablo Öğrenci No. 2, Adı Michael, bölüm CS ve Dönem 2.
İşte mevcut veritabanı durumunun anlık görüntüsü.
Verileri Yükselt
Cassandra üzülüyor. Upsert şu anlama gelir Cassandra Birincil anahtar mevcut değilse bir satır ekler, aksi takdirde birincil anahtar mevcutsa bu satırı günceller.
Bunun açıkça belirtilmesi gereken pratik bir sonucu vardır: bir INSERT işlemi asla yinelenen anahtar hatası bildirmez, bu nedenle yanlışlıkla yapılan bir yeniden ekleme, mevcut satırı uyarı vermeden üzerine yazar. Bunun önlenmesi gerektiğinde, ifadeyi hafif bir işlem haline getirmek için IF NOT EXISTS ekleyin.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Hafif işlemler, kopyalar arasında bir mutabakat turu kullandığından, normal bir yazma işleminden önemli ölçüde daha yavaştır ve gerçekten kontrole ihtiyaç duyulan durumlar için saklanmalıdır.
Veriyi güncelle
MKS Cassandra Güncelleme sorgusu, veriyi güncellemek için kullanılır. Cassandra tablo. Veriler güncellendikten sonra hiçbir sonuç döndürülmezse, bu verilerin başarıyla güncellendiği anlamına gelir, aksi takdirde bir hata döndürülür. Veriler 'Where' ifadesiyle filtrelenirken sütun değerleri 'Set' ifadesinde değiştirilir.
Sözdizimi
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Örnek E-posta
Verileri güncellemeden önce veritabanı durumunu gösteren ekran görüntüsü.
İşte idamın görüntüsü Cassandra Öğrenci tablosundaki kaydı güncelleyen Güncelleştirme komutu.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Güncelleme sorgusunun başarıyla yürütülmesinden sonra Cassandra 'Öğrenciyi Güncelle', öğrenci adı 'Clark'tan 1 numaralı rollno'ya 'Hayden' olarak değiştirilecektir.
Verileri güncelledikten sonra veritabanı durumunu gösteren ekran görüntüsü.
Upsert davranışından dolayı, mevcut olmayan birincil anahtara karşı yapılan bir UPDATE işlemi, başarısız olmak yerine satırı oluşturur.
Cassandra Verileri Sil
'Sil' komutu, Öğrenci tablosundan bir satırın tamamını veya bazı sütunları kaldırır. Veriler silindiğinde tablodan hemen silinmez. Bunun yerine silinen veriler bir mezar taşıyla işaretlenir ve sıkıştırıldıktan sonra kaldırılır.
Sözdizimi
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Yukarıdaki Cassandra satır silme sözdizimi, Where cümlesindeki veri filtrelemesine bağlı olarak bir veya daha fazla satırı siler.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Yukarıdaki sözdizimi tablodan bazı sütunları silecektir.
Örnek E-posta
Verileri silmeden önce mevcut veritabanı durumunu gösteren anlık görüntü buradadır.
İşte Öğrenci tablosundan bir satırı kaldıracak komutun anlık görüntüsü.
DELETE FROM University.Student WHERE rollno = 1;
CQL Delete komutunun başarılı bir şekilde yürütülmesinin ardından, Student tablosundan rollno değeri 1 olan bir satır silinecektir.
İşte verileri sildikten sonra veritabanı durumunu gösteren anlık görüntü.
Mezar taşları, varsayılan olarak on gün olan gc_grace_seconds süresince kalır; böylece silme işlemi sırasında çevrimdışı olan bir düğüm, geri döndüğünde satırı yeniden canlandıramaz. Bu nedenle, büyük hacimli silme işlemleri, her sonraki okuma işleminin taramasını gerektiren işaretler bırakır.
Ne Cassandra desteklemez
CQL, SQL sözdizimini ödünç alır ancak ilişkisel yürütme modelini almaz; bu nedenle birçok tanıdık yapı farklı davranır veya mevcut değildir.
- CQL, tablolar arasında birleştirmeyi desteklemez. İlişkili veriler, yazma sırasında tek bir tabloda denormalize edilmelidir.
- CQL, WHERE yan tümcesinde OR koşullarını desteklemez. Tek bir sütun üzerinde IN operatörünü kullanın veya ayrı sorgular çalıştırın.
- CQL, UNION veya INTERSECT işlemlerini desteklemez.
- Birincil anahtar olmayan sütunlar, üzerlerinde bir indeks oluşturulana kadar filtrelenemez.
- "Büyüktür" ve "küçüktür" karşılaştırmaları yalnızca kümeleme sütunları için geçerlidir, çünkü diskte yalnızca bu sütunlar sıralanır.
- LIKE ile desen eşleştirme, SASI dizini gerektirir ve sıradan sütunlarda kullanılamaz.
Uzun süredir devam eden bir iddianın düzeltilmesi gerekiyor. Toplama işlevleri desteklenmektedir: SAYIM, MİN, MAKS, TOPLAM ve AVG geldi Cassandra 2.2 ve GROUP BY 3.10 sürümünde geldi. Buradaki önemli nokta, kullanılabilirlik değil, kapsamdır.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Yukarıdaki gibi tek bir bölüme kısıtlandığında, toplama işlemi verimlidir. Tüm tablo üzerinde çalıştırıldığında ise küme çapında bir tarama haline gelir, bu yüzden Cassandra Geçici analizler için uygun olmamasının ve kapsamlı raporlamanın genellikle bu yüzden ertelenmesinin nedeni budur. Spark veya harici bir depo.
Cassandra nerede Clause
In Cassandra, veri alımı hassas bir konudur. Sütun filtrelendi Cassandra birincil olmayan anahtar sütunlarda bir dizin oluşturarak.
Sözdizimi
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Örnek E-posta
- Veri filtreleme olmadan Öğrenci tablosundan veri alımını gösteren anlık görüntü buradadır.
SELECT * FROM University.Student;
Öğrenci tablosundan iki kayıt alınır.
- Burada Öğrenci'den veri filtreleme ile veri alımını gösteren anlık görüntü yer almaktadır. Bir kayıt alındı.
Veriler ad sütununa göre filtrelenir. Adı "..." değerine eşit olan tüm kayıtlar alınır. Guru99
SELECT * FROM University.Student WHERE name = 'Guru99';
WHERE yan tümcesinin hangi sütunlara referans verebileceğini düzenleyen kurallar doğrudan birincil anahtardan kaynaklanır.
- MKS bölüm anahtarı Veriyi tutan düğümü tanımladığı için, verimli bir sorgulama için bu bilgi eksiksiz olarak sağlanmalıdır.
- Clustersütunlar Daha sonra kısıtlanabilirler, ancak yalnızca ilan edildikleri sıraya göre. Atlaping Bir tanesi reddedildi.
- Aralık karşılaştırmalarına, daha önceki sütunlarda değil, referans alınan son kümeleme sütununda izin verilir.
- Farketmez diğer sütun İkinci bir dizine ihtiyaç duyulmaktadır, bu da şurada ele alınmıştır: dizin oluştur ve sil öğretici.
Bir sorgu reddedildiğinde, Cassandra Genellikle ALLOW FILTERING eklemeyi önerir. Bunu bir düzeltme değil, bir uyarı olarak değerlendirin: her düğümdeki her bölümü tarar ve şema değişikliği neredeyse her zaman doğru çözümdür.











