Qual è un buon modo per copiare i dati da una Cassandra ColumnFamily a un'altra sullo stesso Keyspace (come INSERT INTO di SQL)?


11

Prova di trovare un modo per trasferire facilmente tutte le righe da una famiglia di colonne / tabelle Cassandra a un'altra.

Il COPYcomando, a quanto ho capito, è una buona opzione. Tuttavia, poiché scarica tutti i dati .csvsu disco e poi li carica di nuovo, non posso fare a meno di chiedermi se esiste un modo migliore per farlo all'interno del motore.

Un esempio specifico di ciò che intendo sarebbe INSERT * FROM my_table INTO my_other_tabledisponibile in molti SQLdatabase. Ovviamente, mi rendo conto che Cassandra è NoSQL e quindi non funziona allo stesso modo, ma sembra qualcosa che potrebbe essere disponibile.

Qual è un buon modo per ottenere questo risultato?

Grazie mille!

Risposte:


10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'

1
Grazie, sembra interessante. Tuttavia, sarei preoccupato per la fuga di caratteri e altri problemi, soprattutto quando si tratta di determinati tipi di dati. È una preoccupazione?
Juan Carlos Coto,

1
Buona idea, ma come ha detto @JuanCarlosCoto, non funziona con alcuni tipi di dati. L'ho provato su un tavolo con una colonna BLOB e si è schiantato su un personaggio di nuova riga.
Alexandre DuBreuil,

Su cassandra 2.1.2 ho dovuto modificare il comando per essere head -n -2 perché l'uscita di COPY include due righe alla fine che devono essere tagliate. Stava ancora funzionando, ma alla fine si è arrabbiato per la linea vuota.
ctlacko,

Nota: utilizzare COPIA DA solo per importare set di dati con meno di 2 milioni di righe. Per importare set di dati di grandi dimensioni, utilizzare il caricatore di massa Cassandra.
GaneshP

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.