Как изменить колонку PARTITION KEY в Кассандре?
Предположим, у нас есть такая таблица:
create table users (
id text,
roles set<text>,
PRIMARY KEY ((id))
);
Я хочу, чтобы все значения этой таблицы были сохранены на одном и том же узле Cassandra (ОК, на самом деле не то же самое, те же 3, но все данные зеркально отображены, но вы получили точку), поэтому для достижения этого я хочу изменить это таблица должна быть такой:
create table users_v2 (
partition int,
id text,
roles set<text>,
PRIMARY KEY ((partition), id)
);
Как я могу сделать это без потери данных из первой таблицы? Кажется, невозможно изменить таблицу, чтобы добавить такой столбец. Я в порядке с этим. То, что я пытаюсь сделать, это скопировать данные из первой таблицы и вставить во вторую таблицу. Когда я делаю это, как есть, столбец раздела отсутствует, что ожидается. Я могу изменить первую таблицу и добавить столбец 'section' в конец, а затем скопировать в правильном порядке, но я не могу обновить все строки в первой таблице, чтобы установить все некоторые разделы, и кажется, что нет значение по умолчанию при добавлении столбца.
2 ответа
Вы просто не можете изменить первичный ключ таблицы Кассандры. Вам нужно создать другую таблицу с новой схемой и выполнить миграцию данных. Я бы посоветовал вам использовать Spark для этого, поскольку действительно легко выполнить миграцию между двумя таблицами с помощью всего лишь нескольких строк кода.
Это также ответ на вопрос об изменении первичного ключа.
Если у вас не много данных в таблице, есть другой способ. В утилите "DataStax Dev Center" выберите таблицу и используйте команду "Экспортировать все результаты в файл как INSERT". Он сохранит все данные из таблицы в файл с инструкциями Insert CQL.
Затем вы должны удалить таблицу, создать новую с новым ключом PARTITION и, наконец, заполнить его инструкциями из файла через CQL.