Was ist ein guter Weg, um Daten von einer Cassandra ColumnFamily in eine andere im selben Keyspace zu kopieren (wie INSERT INTO von SQL)?

11

Es wird versucht, auf einfache Weise alle Zeilen von einer Cassandra ColumnFamily / Table in eine andere zu übertragen.

Der COPYBefehl ist meines Wissens eine gute Option. Da jedoch alle Daten .csvauf der Festplatte gespeichert und dann wieder geladen werden, frage ich mich, ob es einen besseren Weg gibt, dies in der Engine zu tun.

Ein konkretes Beispiel dafür, was ich meine, wäre das INSERT * FROM my_table INTO my_other_tablein vielen SQLDatenbanken verfügbare . Natürlich ist mir klar, dass Cassandra NoSQL ist und daher nicht auf die gleiche Weise funktioniert - aber es scheint etwas zu sein, das verfügbar sein könnte.

Was ist ein guter Weg, um dies zu erreichen?

Vielen Dank!

Juan Carlos Coto
quelle

Antworten:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Vilmos Kuss
quelle
1
Danke, das sieht interessant aus. Ich wäre jedoch besorgt über das Entkommen von Zeichen und andere Probleme, insbesondere beim Umgang mit bestimmten Datentypen. Ist das überhaupt ein Problem?
Juan Carlos Coto
1
Gute Idee, aber wie @JuanCarlosCoto sagte, funktioniert es mit bestimmten Datentypen nicht. Ich habe es an einer Tabelle mit einer Blob-Spalte versucht und es stürzte bei einem Zeilenumbruch ab.
Alexandre DuBreuil
In Cassandra 2.1.2 musste ich den Befehl so ändern, dass er head -n -2 lautet, da die Ausgabe von COPY am Ende zwei Zeilen enthält, die gekürzt werden müssen. Es funktionierte immer noch, aber es wurde wütend auf die leere Zeile am Ende.
Ctlacko
Hinweis - Verwenden Sie COPY FROM nur zum Importieren von Datasets mit weniger als 2 Millionen Zeilen. Verwenden Sie zum Importieren großer Datenmengen den Cassandra-Massenlader.
GaneshP