Как изменить колонку 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.

Другие вопросы по тегам