Jaki jest dobry sposób na skopiowanie danych z jednej Cassandra ColumnFamily do drugiej w tej samej przestrzeni kluczy (jak SQL INSERT INTO)?

11

Próbuję znaleźć sposób na łatwe przeniesienie wszystkich wierszy z Cassandra ColumnFamily / Table do drugiego.

COPYPoleceń, jak rozumiem, jest rozwiązaniem dobrym. Jednak, gdy zrzuca wszystkie dane .csvna dysk, a następnie ładuje je z powrotem, nie mogę przestać się zastanawiać, czy jest lepszy sposób, aby to zrobić w silniku.

Konkretnym przykładem tego, co mam na myśli, jest INSERT * FROM my_table INTO my_other_tabledostępność w wielu SQLbazach danych. Oczywiście zdaję sobie sprawę, że Cassandra jest NoSQL i dlatego nie działa w ten sam sposób - ale wydaje się, że może być dostępna.

Jaki jest dobry sposób na osiągnięcie tego?

Dziękuję bardzo!

Juan Carlos Coto
źródło

Odpowiedzi:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Vilmos Kiss
źródło
1
Dzięki, wygląda to interesująco. Byłbym jednak zaniepokojony ucieczką postaci i innymi problemami, szczególnie w przypadku niektórych rodzajów danych. Czy to w ogóle niepokoi?
Juan Carlos Coto,
1
Dobry pomysł, ale jak powiedział @JuanCarlosCoto, nie działa z niektórymi typami danych. Próbowałem go na stole z kolumną kropli i rozbił się na znaku nowej linii.
Alexandre DuBreuil
Na Cassandrze 2.1.2 musiałem zmodyfikować polecenie, aby było head -n -2, ponieważ wyjście COPY zawiera na końcu dwie linie, które należy przyciąć. Wciąż działało, ale oszalało na punkcie pustej linii na końcu.
ctlacko
Uwaga - Użyj opcji KOPIUJ Z, aby importować zestawy danych zawierające mniej niż 2 miliony wierszy. Aby zaimportować duże zestawy danych, użyj programu ładującego Cassandra.
GaneshP