Каков хороший способ скопировать данные из одной Cassandra ColumnFamily в другую в том же пространстве ключей (например, INSERT INTO в SQL)?

11

Попытка найти способ легко перенести все строки из Cassandra ColumnFamily / Table в другую.

Команда COPY, как я понимаю, является хорошим вариантом. Однако, поскольку он сбрасывает все данные .csvна диск и затем загружает их обратно, я не могу не задаться вопросом, есть ли лучший способ сделать это в движке.

Конкретный пример того, что я имею в виду, будет INSERT * FROM my_table INTO my_other_tableдоступен во многих SQLбазах данных. Конечно, я понимаю, что Cassandra - это NoSQL, и поэтому он не работает одинаково - но это похоже на то, что может быть доступно.

Какой хороший способ сделать это?

Спасибо большое!

Хуан Карлос Кото
источник

Ответы:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Vilmos Kiss
источник
1
Спасибо, это выглядит интересно. Тем не менее, я буду беспокоиться о побеге персонажа и других проблемах, особенно при работе с определенными типами данных. Это проблема вообще?
Хуан Карлос Кото
1
Хорошая идея, но, как сказал @JuanCarlosCoto, он не работает с определенными типами данных. Я попробовал это на столе с колонкой BLOB-объектов, и он разбился на символе новой строки.
Александр Дюбрей
На Кассандре 2.1.2 мне пришлось изменить команду на head -n -2, потому что вывод COPY включает в себя две строки в конце, которые нужно обрезать. Он все еще работал, но в конце разозлился из-за пустой строки.
ctlacko
Примечание. Используйте только COPY FROM для импорта наборов данных, содержащих менее 2 миллионов строк. Чтобы импортировать большие наборы данных, используйте массовый загрузчик Cassandra.
ГанешП