เป็นวิธีที่ดีในการคัดลอกข้อมูลจาก Cassandra ColumnFamily ไปยังอีกใน Keyspace เดียวกัน (เช่น INSERT INTO ของ SQL) อะไร


11

พยายามหาวิธีถ่ายโอนแถวทั้งหมดจาก Cassandra ColumnFamily / Table ไปยังแถวอื่นได้อย่างง่ายดาย

COPYคำสั่งที่ผมเข้าใจคือตัวเลือกที่ดี อย่างไรก็ตามเมื่อมันทิ้งข้อมูลทั้งหมดลง.csvในดิสก์แล้วโหลดกลับฉันไม่สามารถช่วยได้ แต่สงสัยว่ามีวิธีที่ดีกว่าที่จะทำในเครื่องยนต์

ตัวอย่างเฉพาะของสิ่งที่ฉันหมายถึงจะมีINSERT * FROM my_table INTO my_other_tableอยู่ในSQLฐานข้อมูลจำนวนมาก แน่นอนฉันรู้ว่า Cassandra เป็น NoSQL ดังนั้นจึงไม่สามารถทำงานได้เหมือนกัน - แต่ดูเหมือนว่ามีบางอย่างที่พร้อมใช้งาน

อะไรคือวิธีที่ดีในการทำสิ่งนี้ให้สำเร็จ

ขอบคุณมาก ๆ!

คำตอบ:


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

1
ขอบคุณมันดูน่าสนใจ อย่างไรก็ตามฉันกังวลเกี่ยวกับการหลีกเลี่ยงตัวละครและปัญหาอื่น ๆ โดยเฉพาะเมื่อต้องรับมือกับข้อมูลบางประเภท นั่นเป็นข้อกังวลหรือเปล่า?
Juan Carlos Coto

1
ความคิดที่ดี แต่อย่างที่ @JuanCarlosCoto กล่าวว่ามันไม่สามารถทำงานกับข้อมูลบางประเภทได้ ฉันลองมันบนโต๊ะที่มีคอลัมน์หยดและมันชนกับอักขระขึ้นบรรทัดใหม่
Alexandre DuBreuil

ในคาสซานดรา 2.1.2 ฉันต้องแก้ไขคำสั่งให้เป็นเฮด -n -2 เพราะ ouput ของ COPY มีสองบรรทัดที่ส่วนท้ายที่จำเป็นต้องตัดแต่ง มันยังคงใช้งานได้ แต่มันก็โมโหเกี่ยวกับบรรทัดว่างเปล่าในตอนท้าย
ctlacko

หมายเหตุ - ใช้คัดลอกจากเพื่อนำเข้าชุดข้อมูลที่น้อยกว่า 2 ล้านแถวเท่านั้น หากต้องการนำเข้าชุดข้อมูลขนาดใหญ่ให้ใช้โหลดเดอร์จำนวนมากของ Cassandra
GaneshP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.