2014-11-19 6 views
11

Я понимаю, что это невозможно с помощью UPDATE.Значение первичного ключа Cassandra UPDATE

Вместо этого я хотел бы выполнить миграцию всех строк с помощью PK = 0 для новых строк, где PK = 1. Существуют ли какие-либо простые способы достижения этого?

ответ

17

Для относительно простого способа вы всегда можете быстро выполнить команду COPY TO/FROM в cqlsh.

Предположим, что у меня есть семейство столбцов (таблица), называемое «emp» для сотрудников.

CREATE TABLE stackoverflow.emp (
    id int PRIMARY KEY, 
    fname text, 
    lname text, 
    role text 
) 

И для целей этого примера у меня есть одна строка.

[email protected]:stackoverflow> SELECT * FROM emp; 

id | fname | lname | role 
----+-------+-------+------------- 
    1 | Angel | Pay | IT Engineer 

Если я хочу, чтобы воссоздать Angel с новым идентификатором, я могу COPY содержимое таблицы в TO файл .csv:

[email protected]:stackoverflow> COPY stackoverflow.emp TO '/home/aploetz/emp.csv'; 

1 rows exported in 0.036 seconds. 

Теперь, я буду использовать мой любимый текстовый редактор, чтобы изменить id от ангела до 2 в emp.csv. Обратите внимание, что если у вас есть несколько строк в файле (которые не нуждаются в обновлении) это ваша возможность удалить их:

2,Angel,Pay,IT Engineer 

Я сохранить файл, а затем COPY обновленный ряд назад в Кассандре FROM файл:

[email protected]:stackoverflow> COPY stackoverflow.emp FROM '/home/aploetz/emp.csv'; 

1 rows imported in 0.038 seconds. 

Теперь Angel имеет две строки в таблице "EMP".

[email protected]:stackoverflow> SELECT * FROM emp; 

id | fname | lname | role 
----+-------+-------+------------- 
    1 | Angel | Pay | IT Engineer 
    2 | Angel | Pay | IT Engineer 

(2 rows) 

Для получения дополнительной информации проверьте DataStax doc on COPY.

+0

Спасибо за ответ. К сожалению, мой идентификатор является частью составного первичного ключа и поэтому дублируется (возможно, тысячи раз). Изменение текстового редактора вручную невозможно. Возможно ли передавать данные с помощью COPY ... изменить ключ ... и передать его обратно одним инструментом? – greenimpala

+3

Любой водитель сделает это довольно легко. Для одноразового использования я бы выбрал драйвер python datastax. Просто запросите нужные строки, измените значения и запишите их обратно в таблицу. Если вы хотите, чтобы я расширил это, скажите так, и я получу полный ответ ниже. – mildewey

+0

@greenimpala Mildewey прав, вам, вероятно, будет проще написать быстрый скрипт Python для этого. – Aaron

Смежные вопросы