카산드라에서는 Insert로 데이터를 넣는 방법 외에 csv 파일로 데이터를 한꺼번에 넣을수 있는 기능과
카산드라의 데이터를 csv 파일로 저장하는 기능을 지원한다.
이런 기능은 cql창에서 COPY 명령어를 사용하면 가능하다.
# Import : Csv File -> Cassandra
COPY table_name [( column_list )] FROM 'file_name'[, 'file2_name', ...] | STDIN [WITH option = 'value' [AND ...]]
# Export : Cassandra -> Csv File
COPY table_name [( column_list )] TO 'file_name'[, 'file2_name', ...] | STDOUT [WITH option = 'value' [AND ...]]
COPY ... FROM 실습
1) 테이블 생성
create table emp
(
emp_id int primary key,
emp_city text,
emp_name text,
emp_phone varint,
emp_sal varint
)
2) Import할 csv 파일 생성
emp_id|emp_city|emp_name|emp_phone|emp_sal
1|seoul|loga|01012345678|11575
2|seoul|logb|01012345678|11575
3|jeju|logc|01012345678|11575
- 컬럼명이 첫 줄에, 나머지는 구분자로 구분되어 있어야한다.
- 물론, 첫줄에 컬럼명을 넣지 않았을때 옵션값으로 처리할 순 있지만, 데이터의 빠른 확인을 위해 컬럼명 넣는 것을 추천한다.
- 컬럼별로 데이터 타입(int, text, map, timestamp등)을 꼭 맞춰줘야 한다.
- 테이블에 설정된 데이터 타입이 맞지 않으면 아래와 같은 에러가 발생한다.
cqlsh:log> COPY emp(emp_id,emp_city,emp_name,emp_phone,emp_sal)
... FROM 'C:/Doople/Sample-Rawdata/test.csv' WITH DELIMITER='|';
Using 11 child processes
Starting copy of log.emp with columns [emp_id, emp_city, emp_name, emp_phone, emp_sal].
Failed to import 1 rows: ParseError - Failed to parse log003 : invalid literal for int() with base 10: 'log003', given up without retries
Failed to import 1 rows: ParseError - Failed to parse log002 : invalid literal for int() with base 10: 'log002', given up without retries
Failed to import 1 rows: ParseError - Failed to parse emp_id : invalid literal for int() with base 10: 'emp_id', given up without retries
Failed to import 1 rows: ParseError - Failed to parse log001 : invalid literal for int() with base 10: 'log001', given up without retries
Failed to process 4 rows; failed rows written to import_log_emp.err
.....
3) Cql창에서 COPY 명령어 실행
COPY emp(emp_id,emp_city,emp_name,emp_phone,emp_sal)
FROM 'C:/log/test.csv' WITH DELIMITER='|';
COPY {tablename}({cloumn_list})
FROM '{csv file path}' WITH DELIMITER='|';
COPY FROM/TO 옵션 값
4) 실행 결과
카산드라 공식 레퍼런스를 참고하면 다양한 옵션으로 데이터를 Import/Export가 가능하다.
참고사이트
https://docs.datastax.com/en/cql-oss/3.x/cql/cql_reference/cqlshCopy.html
'Database > Cassandra' 카테고리의 다른 글
[Cassandra][datastax] Conceptual Data Modeling, Entity-Relationship (ER) Model (0) | 2020.05.25 |
---|---|
[Cassandra] 원격(remote), 로컬(local) 동시 접속 (0) | 2020.05.22 |
[Cassandra] Table, Column, Partition Key Clustering Key (0) | 2020.05.21 |