vsql을 이용한 데이터 Export

Updated:

버티카 데이터 Export

테이블, 쿼리 수행 결과 등 데이터를 export하는 방법은 아래와 같이 존재한다.

  • plaintext로 저장 : 쿼리 결과를 파일로 저장(vsql -o 옵션 이용)
  • 버티카로 전송 : export to vertica, copy from vertica를 통해 다른 버티카 클러스터로 데이터 전송
  • parquet파일 포멧으로 저장 : 쿼리 결과를 parquet파일로 저장(export to parquet 이용)

이번 포스터에서는 vsql을 이용해서 쿼리 결과를 plaintext 파일로 저장하는 방법에 대해서 소개한다.
vsql을 접속하기 위해 사용하는 ssh툴의 character set은 UTF-8로 설정하여야 한다.

데이터를 export하기 위해서는 컬럼 구분자, 레코드 구분자 등을 설정해야 한다. 이러한 설정을 vsql 의 옵션으로 지정이 가능하다.

vsql 옵션 메타 명령어 커맨드라인 명령어  
데이터 공백 제거 \a -A or –no-align  
데이터만 출력 \t -t or –tuples-only  
필드 구분자 설정 \pset fieldsep -F or -Pfieldsep * format 이 unaligned 로 설정되어야 구분자 설정 변경 가능
\pset format unaligned
레코드 구분자 설정 \pset recordsep -R or -Precordsep  
출력 파일 설정 \o -o or –output  
SQL 구문 N/A -c or –command  
SQL 파일 N/A -f or –file  

vsql 메타 명령어

[dbadmin@vnode1 ~]$ vsql -wpassword
Welcome to vsql, the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

dbadmin=> select * from t;
col1 | col2 | col3
------+------+------
    1 | aaa  |   11
    2 | bbb  |   22
    3 | ccc  |   33
(3 rows)
dbadmin=>
dbadmin=> --\a \t 공백 제거한 데이터만 출력
dbadmin=> \a
Output format is unaligned.
dbadmin=> \t
Showing only tuples.
dbadmin=>
dbadmin=> select * from t;
2|bbb|22
3|ccc|33
1|aaa|11
dbadmin=>
dbadmin=> --\o 출력 결과 파일로 저장
dbadmin=> \o /tmp/t.sam
dbadmin=> select * from t;
dbadmin=> \!cat /tmp/t.sam
2|bbb|22
3|ccc|33
1|aaa|11
dbadmin=> --\o 출력 결과 파일로 저장 off
dbadmin=> \o
dbadmin=> -- 구분자 지정을 위해 \pset format unaligned 설정
dbadmin=> \pset format unaligned
Output format is unaligned.
dbadmin=> --필드 구분자 지정
dbadmin=> \pset fieldsep #
Field separator is "#".
dbadmin=> select * from t;
2#bbb#22
3#ccc#33
1#aaa#11
dbadmin=>
dbadmin=> --레코드 구분자 지정
dbadmin=> \pset recordsep ^
Record separator is "^".
dbadmin=> select * from t;
2#bbb#22^3#ccc#33^1#aaa#11
dbadmin=>
dbadmin=> --필드 구분자를 control character ESC로 지정하는 경우 '\003'로 지정해야한다.
dbadmin=> \pset fieldsep '\033'
Field separator is "
dbadmin=> select * from t;

vsql 커맨드라인 명령어

#-c 옵션으로 쿼리 수행
[dbadmin@vnode1 ~]$ vsql -wpassword -c'select * from t;'
col1 | col2 | col3
------+------+------
    1 | aaa  |   11
    2 | bbb  |   22
    3 | ccc  |   33
(3 rows)

#-At옵션으로 공백 제거한 데이터만 출력
[dbadmin@vnode1 ~]$ vsql -wpassword -c'select * from t;' -At
2|bbb|22
3|ccc|33
1|aaa|11

#-o옵션으로 출력 결과 파일로 저장
[dbadmin@vnode1 ~]$ vsql -wpassword -c'select * from t;' -At -o'/tmp/t.sam'
[dbadmin@vnode1 ~]$ cat /tmp/t.sam
2|bbb|22
3|ccc|33
1|aaa|11
#-F옵션으로 필드 구분자 지정
[dbadmin@vnode1 ~]$ vsql -wpassword -c'select * from t;' -At -F'#' -o'/tmp/t.sam'
[dbadmin@vnode1 ~]$ cat /tmp/t.sam
1#aaa#11
2#bbb#22
3#ccc#33

#필드 구분자를 control character ESC로 지정하는 경우 $'\003'로 지정해야한다.
[dbadmin@vnode1 ~]$ vsql -wpassword -c'select * from t;' -At -F$'\033' -o'/tmp/t.sam'
[dbadmin@vnode1 ~]$ vi /tmp/t.sam
1^[aaa^[11
2^[bbb^[22
3^[ccc^[33

#-f옵션으로 쿼리를 별도에 파일로 저장해서 실행
[dbadmin@vnode1 ~]$ cat /tmp/t.sql
select * from t;
[dbadmin@vnode1 ~]$ vsql -wpassword -f'/tmp/t.sql' -At -o'/tmp/t.sam'
[dbadmin@vnode1 ~]$ cat /tmp/t.sam
1|aaa|11
2|bbb|22
3|ccc|33