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!

Antworten:


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.