2014-12-04 19 views
9

Benim tablo tüm kümelenme dizinleri belirtmek zorunda olmadan user_id = 'xxx' olan tümSatırlargüncelleme istiyorum bu
Sadece bölümleme anahtarını kullanarak cassandra satırlarını UPDATE nasıl?

create table Notes(
    user_id varchar, 
    real_time timestamp, 
    insertion_time timeuuid, 
    read boolean PRIMARY KEY (user_id,real_time,insertion_time) 
); 

create index read_index on Notes (read); 

benziyor.

UPDATE Notes SET read = true where user_id = 'xxx'; // Says Error 

Hata:.? Mesaj = "zorunlu PRIMARY KEY parçası real_time Eksik

Ben ikincil indeks oluşturma denedi, ama onun birincil anahtar izin verilmeyen ben bu çözebilir nasıl

Ben mümkün olmalıdır select * from Notes where user_id = 'xxx' yapabilmek istiyorum birincil anahtar neden olmak user_id seçti.

cevap

8

bu olabilir iken Bir RDBMS ve SQL ile mümkün, Cassandra'da cql ile mümkün değildir. UPDATE komuta DataStax belgelerden;

Each update statement requires a precise set of primary keys to be specified using a WHERE clause. You need to specify all keys in a table having compound and clustering columns.

Muhtemelen bu tür bir güncellemeyi gerçekleştirmek için Python hızlı bir şey (ya da diğer sürücülerin bir) yazmak gerekir.

+2

Yukarıdaki cevabın doğru olmasına rağmen, birincil anahtarın son sütunu için 'IN' yan tümcesini kullanabileceğinizi belirtmek gerekir (yani, 'insertion_time' yazarların sorusu). Kullanım durumunuza bağlı olarak, gerekli miktarda CQL ifadesini azaltmak yararlıdır. – user909481