изменить составной первичный ключ в cassandra CQL 3.0

Я в ситуации, когда мне нужно изменить составной первичный ключ следующим образом:

Старый первичный ключ: (id, source, attribute_name, updated_at);

Я хочу новый первичный ключ: (источник, идентификатор, имя_атрибута, обновленный_at);

Я выполнил следующую команду (похожую на mysql):

ALTER TABLE general_trend_table 
DROP PRIMARY KEY, 
ADD PRIMARY KEY(source, id, attribute_name, updated_at);

Получила следующую ошибку:

Неверный запрос: строка 1:38 нет альтернативы при вводе "ПЕРВИЧНЫЙ"

есть идеи, как обойти эту проблему? более конкретно, я хочу знать, есть ли способ изменить первичный ключ в кассандре?


person aroyc    schedule 03.03.2014    source источник


Ответы (2)


Невозможно изменить первичный ключ, поскольку он определяет, как ваши данные физически хранятся.

Вы можете создать новую таблицу с новым первичным ключом, скопировать данные из старой, а затем удалить старую таблицу.

person Mikhail Stepura    schedule 03.03.2014
comment
Я пробовал использовать cqlsh, ALTER COLUMNFAMILY mycolumnfamily ПЕРЕИМЕНОВАТЬ ключ TO key1; и это работает отлично. Пробуя это, я также получил следующие предложения. ADD, ALTER, DROP, WITH @Mikhail Разве мы не можем использовать их для изменения первичного ключа? - person udarakr; 18.03.2014
comment
Как переименовать таблицу? Вы можете привести полный пример? - person Justin Thomas; 25.11.2015

Если есть возможность использовать старый первичный ключ, вы можете создать материальное представление: http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html Но это рекомендуется только в том случае, если вам понадобится старый ключ.

person CordlessWool    schedule 22.07.2016