In CQL, können Sie die Spalte umbenennen verwendet als Primärschlüssel, aber nicht andere. Dies scheint das Gegenteil von dem zu sein, was es sein sollte, man würde denken, dass der Primärschlüssel derselbe bleiben müsste und die anderen einfach zu ändern wären! Der Grund kommt von Implementierungsdetails.
Der Name des Primärschlüssels wird nicht in jede Zeile geschrieben, sondern an einem anderen Ort, der leicht änderbar ist. Bei Feldern ohne Primärschlüssel werden die Namen der Felder in jede Zeile geschrieben. Um die Spalte umzubenennen, müsste das System jede einzelne Zeile neu schreiben.
This article hat einige fantastische Beispiele und eine viel längere Diskussion über Cassandras Interna.
Um ein Beispiel direkt aus dem article, betrachten Sie dieses Beispiel Spalte Familie ausleihen:
cqlsh:test> CREATE TABLE example (
... field1 int PRIMARY KEY,
... field2 int,
... field3 int);
ein wenig Daten eingeben:
cqlsh:test> INSERT INTO example (field1, field2, field3) VALUES (1,2,3);
Und dann (CQLSH nicht) die Cassandra-CLI-Ausgabe von Abfragen dieser Spaltenfamilie:
[[email protected]] list example;
-------------------
RowKey: 1
=> (column=, value=, timestamp=1374546754299000)
=> (column=field2, value=00000002, timestamp=1374546754299000)
=> (column=field3, value=00000003, timestamp=1374546754299000)
Der Name des Primärschlüssels "field1" wird in keiner der Zeilen gespeichert, aber "field2" und "field3" werden ausgeschrieben. Um diese Namen zu ändern, müsste jede Zeile neu geschrieben werden.
Wenn Sie also wirklich eine nicht-primäre Spalte umbenennen wollen, gibt es grundsätzlich zwei verschiedene Strategien und keine davon ist sehr wünschenswert.
- Lassen Sie die Spalte fallen und fügen Sie sie zurück, wie ein anderes Poster erwähnt. Dies hat den großen Nachteil, dass alle Daten in dieser Spalte gelöscht werden.
oder
- Erstellen Sie eine neue Spalte Familie, die im Grunde eine Kopie der alten, aber mit der Säule in Frage umbenannt und Ihre Daten dort neu schreiben. Dies ist natürlich sehr rechenintensiv.
Das beantwortet die Frage nicht. Sollte stattdessen ein Kommentar sein. – Amit
Können Sie bitte auf die Dokumentation verweisen, die besagt, dass dies der Zweck ist? – Sumod