Wie aktualisiert clustering-Schlüssel in Kassandra-mit update-Abfrage?
Dies ist meine Tabellenstruktur und ich bin eine Aktualisierung der Sequenz mit der folgenden Abfrage:
Update styles set sequence=1 where styleid = 'CLASSIC';
Erhalte ich die Fehlermeldung wie
PRIMARY KEY part sequence found in SET part
Missing PRIMARY KEY part sequence
CREATE TABLE styles (
styleid ascii,
sequence int,
active boolean,
image ascii,
name ascii,
PRIMARY KEY (styleid, sequence)
) WITH CLUSTERING ORDER BY (sequence DESC);
Bitte mir jemand helfen bei der Aktualisierung der clustering-Schlüssel-Sequenz, so dass Sie aktualisiert werden. Oder eine alternative Methode bitte teilen.
- Können Sie Ihre schema für die Tabelle ?
- CREATE TABLE styles ( styleid ascii, Sequenz-int, boolean active, ascii Bild, name, ascii, PRIMARY KEY (styleid -, Sequenz -) ) MIT CLUSTERING-REIHENFOLGE DURCH (Reihenfolge ABSTEIGEND) UND bloom_filter_fp_chance=0.010000 UND caching='KEYS_ONLY" UND " Kommentar=" UND dclocal_read_repair_chance=0.100000 UND gc_grace_seconds=864000 UND read_repair_chance=0.000000, UND replicate_on_write='true' UND populate_io_cache_on_flush='false' UND der Verdichtung={'class': 'SizeTieredCompactionStrategy'} UND compression={'sstable_compression': 'LZ4Compressor'};
- Ich bearbeitet habe, diese Frage zu entfernen, die
sql
- tag, und ersetzen Sie es mit dercql
tag. Dies ist eine wichtige Unterscheidung zu machen, da sql != cql. cql ist eine Teilmenge der sql. Erwartet cql-Funktion, wie sql, ist eine übung, die letztlich dazu führen Sie zu frustration.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf wie Cassandra speichert die Daten, Aktualisierung clustering-Spalten (Primary key) ist nicht möglich.
Rowkey, die eine Kombination von
**styleid** ->[sequence] -> [active boolean,image ascii, name ascii]
Um keine primäre Spalten für die Aktualisierung/löschen, muss es zu analysieren, durch
styleid -> sequence
partition zu schlagen, die Spalten.Primary key einmal erstellt wurden, können nicht geändert werden, denn es stellt dar, wie Daten in Cassandra. Daher aktualisieren 'sequence' ist hier nicht möglich.
Während ja, die Aktualisierung der clustering-Spalten direkt nicht möglich ist Cassandra, wie alles, gibt es Möglichkeiten, das zu tun, was Sie tun müssen.
Müssen Sie erstellen eine temporäre Tabelle, die die Daten darstellt, die die Art und Weise Sie es haben wollen. Dann müssen Sie zum löschen der alten Tabelle, und erstellen Sie eine neue Tabelle basierend auf der temporären Tabelle.
Ich würde vorschlagen:
1) Sichern Sie Ihre ersten Tabelle, weil die Chancen sind, wenn Sie das erste mal das Sie etwas vermissen werde.
2) Schreiben Sie ein Programm, um die änderungen, die Sie benötigen (entweder ein Javascript-Programm, Java, was auch immer Sie mit vertraut sind).
3) testen, Testen, und dann erneut testen (zuerst lokal testen, bewegen Sie dann bis zu einer integration style-Umgebung, und schließlich testen auf irgendeine Art von pre-prod-Umgebung, die so nah wie Sie bekommen können, um Ihre Produktionsumgebung.