Qual é uma boa maneira de copiar dados de uma Cassandra ColumnFamily para outra no mesmo espaço de chave (como INSERT INTO do SQL)?

11

Tentando encontrar uma maneira de transferir facilmente todas as linhas de uma Cassandra ColumnFamily / Table para outra.

O COPYcomando, pelo que entendi, é uma boa opção. No entanto, como ele despeja todos os dados .csvno disco e os carrega novamente, não posso deixar de me perguntar se há uma maneira melhor de fazê-lo no mecanismo.

Um exemplo específico do que quero dizer seria o INSERT * FROM my_table INTO my_other_tabledisponível em muitos SQLbancos de dados. Obviamente, percebo que o Cassandra é NoSQL e, portanto, não funciona da mesma maneira - mas parece que algo pode estar disponível.

Qual é uma boa maneira de conseguir isso?

Muito obrigado!

Juan Carlos Coto
fonte

Respostas:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Vilmos Kiss
fonte
1
Obrigado, isso parece interessante. No entanto, eu me preocuparia com a fuga de caracteres e outros problemas, principalmente ao lidar com certos tipos de dados. Isso é uma preocupação?
Juan Carlos Coto
1
Boa ideia, mas como o @JuanCarlosCoto disse, ele não funciona com certos tipos de dados. Eu tentei em uma tabela com uma coluna de blob e ela travou em um caractere de nova linha.
Alexandre DuBreuil
No cassandra 2.1.2, tive que modificar o comando para ser head -n -2, porque a saída de COPY inclui duas linhas no final que precisam ser cortadas. Ainda estava funcionando, mas ficou bravo com a linha vazia no final.
Ctlacko
Nota - Use apenas COPY FROM para importar conjuntos de dados com menos de 2 milhões de linhas. Para importar conjuntos de dados grandes, use o carregador em massa Cassandra.
GaneshP