12

Trying to find a way to easily transfer all the rows from a Cassandra ColumnFamily/Table to another.

The COPY command, as I understand, is a good option. However, as it dumps all the data to .csv on disk and then loads it back, I can't help but wonder if there is a better way to do it in-engine.

A specific example of what I mean would be the INSERT * FROM my_table INTO my_other_table available in many SQL databases. Of course, I realize that Cassandra is NoSQL and therefore does not to work the same way - but it seems like something which might be available.

What is a good way to accomplish this?

Thanks very much!

2 Answers 2

11
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
4
  • 1
    Thanks, this looks interesting. However, I'd be concerned about character escaping and other issues, especially when dealing with certain types of data. Is that a concern at all? Aug 19, 2014 at 19:04
  • 2
    Good idea, but as @JuanCarlosCoto said, it doesn't work with certain data types. I tried it on a table with a blob column and it crashed on a newline character. May 29, 2015 at 10:09
  • On cassandra 2.1.2 I had to modify the command to be head -n -2 because the ouput of COPY includes two lines at the end that need to be trimmed. It was still working, but it got mad about the empty line at the end.
    – ctlacko
    Oct 1, 2015 at 16:10
  • Note - Only use COPY FROM to import datasets that have less than 2 million rows. To import large datasets, use the Cassandra bulk loader.
    – GaneshP
    Oct 9, 2018 at 19:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.