Apa cara yang baik untuk menyalin data dari satu Cassandra ColumnFamily ke yang lain di Keyspace yang sama (seperti SQL's INSERT INTO)?

11

Mencoba menemukan cara untuk dengan mudah mentransfer semua baris dari Cassandra ColumnFamily / Table ke yang lain.

The COPYperintah, seperti yang saya mengerti, adalah pilihan yang baik. Namun, karena ia membuang semua data ke .csvdalam disk dan kemudian memuatnya kembali, saya tidak bisa tidak bertanya-tanya apakah ada cara yang lebih baik untuk melakukannya di dalam mesin.

Contoh spesifik tentang apa yang saya maksud akan INSERT * FROM my_table INTO my_other_tabletersedia di banyak SQLbasis data. Tentu saja, saya menyadari bahwa Cassandra adalah NoSQL dan karenanya tidak bekerja dengan cara yang sama - tetapi sepertinya ada sesuatu yang mungkin tersedia.

Apa cara yang baik untuk mencapai ini?

Terima kasih banyak!

Juan Carlos Coto
sumber

Jawaban:

10
cqlsh -k mykeyspace -e 'COPY fromTable(columnNames) TO STDOUT' | head -n -1 | 
cqlsh -k mykeyspace -e 'COPY toTable(columnNames) FROM STDIN'
Vilmos Kiss
sumber
1
Terima kasih, ini terlihat menarik. Namun, saya akan khawatir tentang pelolosan karakter dan masalah lainnya, terutama ketika berhadapan dengan tipe data tertentu. Apakah itu perhatian?
Juan Carlos Coto
1
Ide bagus, tetapi seperti yang dikatakan @JuanCarlosCoto, itu tidak bekerja dengan tipe data tertentu. Saya mencobanya di atas meja dengan kolom gumpalan dan jatuh pada karakter baris baru.
Alexandre DuBreuil
Pada cassandra 2.1.2 saya harus memodifikasi perintah menjadi head -n -2 karena ouput COPY menyertakan dua baris pada bagian akhir yang perlu dipangkas. Itu masih bekerja, tetapi marah tentang garis kosong di akhir.
ctlacko
Catatan - Hanya gunakan COPY FROM untuk mengimpor kumpulan data yang memiliki kurang dari 2 juta baris. Untuk mengimpor kumpulan data besar, gunakan pemuat massal Cassandra.
GaneshP