Cassandra UPDATE значение первичного ключа

Я понимаю, что это невозможно с помощью ОБНОВЛЕНИЯ.

Вместо этого я хотел бы перенести все строки с PK = 0 в новые строки, где PK = 1. Есть ли простые способы добиться этого?


person greenimpala    schedule 19.11.2014    source источник


Ответы (1)


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

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

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

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

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

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

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

aploetz@cqlsh: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 обновленную строку обратно в Cassandra FROM файл:

aploetz@cqlsh:stackoverflow> COPY stackoverflow.emp FROM '/home/aploetz/emp.csv';

1 rows imported in 0.038 seconds.

Теперь у Ангела две строки в таблице emp.

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

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

(2 rows)

Дополнительную информацию см. В документе DataStax по КОПИРОВАНИЮ.

person Aaron    schedule 19.11.2014
comment
Спасибо за ответ. К сожалению, мой идентификатор является частью составного первичного ключа и поэтому дублируется (возможно, тысячи раз). Смена текстового редактора вручную невозможна. Можно ли передавать данные с помощью COPY ... изменить ключ ... и вернуть их с помощью одного инструмента? - person greenimpala; 20.11.2014
comment
Любой водитель сделает это довольно легко. Для разового использования я бы, вероятно, выбрал драйвер Python для данных datastax. Просто запросите нужную строку (строки), измените значения и запишите их обратно в таблицу. Если вы хотите, чтобы я более подробно остановился на этом, скажите об этом, и я дам полный ответ ниже. - person mildewey; 21.11.2014
comment
@greenimpala Милдевей прав, вам, вероятно, будет проще написать быстрый скрипт Python для этого. - person Aaron; 21.11.2014