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!

Odpowiedzi:


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.