한 Cassandra ColumnFamily의 데이터를 동일한 키 공간의 다른 SQLspace (SQL의 INSERT INTO와 같은)로 복사하는 좋은 방법은 무엇입니까?


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가 말했듯이 특정 데이터 유형에서는 작동하지 않습니다. Blob 열이있는 테이블에서 시도했지만 줄 바꿈 문자가 충돌했습니다.
Alexandre DuBreuil

cassandra 2.1.2에서는 COPY의 출력에 트림이 필요한 두 줄이 포함되어 있기 때문에 명령을 head -n -2로 수정해야했습니다. 그것은 여전히 ​​작동하고 있었지만 끝에 빈 줄에 대해 화를 냈습니다.
ctlacko

주 – 행이 2 백만 미만인 데이터 세트를 가져 오려면 COPY FROM 만 사용하십시오. 큰 데이터 세트를 가져 오려면 Cassandra 벌크 로더를 사용하십시오.
GaneshP

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.