Quel est un bon moyen de copier des données d'un Cassandra ColumnFamily vers un autre sur le même Keyspace (comme INSERT INTO de SQL)?

11

Essayer de trouver un moyen de transférer facilement toutes les lignes d'un Cassandra ColumnFamily / Table à un autre.

La COPYcommande, que je comprends, est une bonne option. Cependant, comme il vide toutes les données sur .csvle disque et les charge ensuite, je ne peux m'empêcher de me demander s'il existe une meilleure façon de le faire dans le moteur.

Un exemple spécifique de ce que je veux dire serait INSERT * FROM my_table INTO my_other_tabledisponible dans de nombreuses SQLbases de données. Bien sûr, je me rends compte que Cassandra est NoSQL et ne fonctionne donc pas de la même manière - mais cela semble être quelque chose qui pourrait être disponible.

Quelle est la bonne façon d'y parvenir?

Merci beaucoup!

Juan Carlos Coto
la source

Réponses:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Baiser de Vilmos
la source
1
Merci, cela semble intéressant. Cependant, je serais préoccupé par l'échappement de caractères et d'autres problèmes, en particulier lorsqu'il s'agit de certains types de données. Est-ce une préoccupation du tout?
Juan Carlos Coto
1
Bonne idée, mais comme @JuanCarlosCoto l'a dit, cela ne fonctionne pas avec certains types de données. Je l'ai essayé sur une table avec une colonne blob et il s'est écrasé sur un caractère de nouvelle ligne.
Alexandre DuBreuil
Sur cassandra 2.1.2, j'ai dû modifier la commande pour être head -n -2 car la sortie de COPY comprend deux lignes à la fin qui doivent être coupées. Il fonctionnait toujours, mais il était devenu fou de la ligne vide à la fin.
ctlacko du
Remarque - N'utilisez COPY FROM que pour importer des jeux de données contenant moins de 2 millions de lignes. Pour importer des jeux de données volumineux, utilisez le chargeur en vrac Cassandra.
GaneshP