¿Cuál es una buena manera de copiar datos de una Cassandra ColumnFamily a otra en el mismo Keyspace (como INSERT INTO de SQL)?

11

Intentando encontrar una manera de transferir fácilmente todas las filas de una familia / tabla de columnas Cassandra a otra.

El COPYcomando, según tengo entendido, es una buena opción. Sin embargo, como volca todos los datos en .csvel disco y luego los vuelve a cargar, no puedo evitar preguntarme si hay una mejor manera de hacerlo en el motor.

Un ejemplo específico de lo que quiero decir sería el INSERT * FROM my_table INTO my_other_tabledisponible en muchas SQLbases de datos. Por supuesto, me doy cuenta de que Cassandra es NoSQL y, por lo tanto, no funciona de la misma manera, pero parece algo que podría estar disponible.

¿Cuál es una buena manera de lograr esto?

¡Muchas gracias!

Juan Carlos Coto
fuente

Respuestas:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Beso Vilmos
fuente
1
Gracias, esto se ve interesante. Sin embargo, me preocuparía el escape de personajes y otros problemas, especialmente cuando se trata de ciertos tipos de datos. ¿Es eso una preocupación en absoluto?
Juan Carlos Coto
1
Buena idea, pero como dijo @JuanCarlosCoto, no funciona con ciertos tipos de datos. Lo probé en una mesa con una columna de blob y se estrelló en un personaje de nueva línea.
Alexandre DuBreuil
En cassandra 2.1.2, tuve que modificar el comando para que sea head -n -2 porque el resultado de COPY incluye dos líneas al final que deben recortarse. Seguía funcionando, pero se enojó por la línea vacía al final.
ctlacko
Nota: utilice COPY FROM solo para importar conjuntos de datos que tengan menos de 2 millones de filas. Para importar grandes conjuntos de datos, use el cargador masivo Cassandra.
GaneshP