이번 포스팅에서는 Embulk를 사용하여 GCP의 Cloud SQL(MySQL)에 데이터를 넣어보는 테스트를 해보겠다.
MySQL관련 Plug-in 설치
아래는 MySQL관련 플러그인 설치 커맨드이다.
$ embulk gem install embulk-input-mysql
$ embulk gem install embulk-output-mysql
# input은 데이터를 받아올 곳, output은 데이터를 넣을 곳 이라고 이해하면 된다.
ex) MySQL에서 꺼내서 Bigquery에 넣고싶다면 input-mysql, output-bigquery
이제, Embulk에서 제공해주는 example 데이터로 (csv파일) Cloud SQL에 넣어보자.
Embulk Example (CSV -> MySQL)
Embulk에서는 기본적으로 예제를 지원한다.
예제로 생성되는 csv파일로부터 데이터를 읽어와 MySQL에 넣어보는 작업을 해보겠다.
우선, 다음 명령어로 sample을 만들자.
$ embulk example
2017-10-10 05:28:29.070 +0000: Embulk v0.8.35
Creating embulk-example directory...
Creating embulk-example/
Creating embulk-example/csv/
Creating embulk-example/csv/sample_01.csv.gz
Creating embulk-example/seed.yml
Run following subcommands to try embulk:
1. embulk guess embulk-example/seed.yml -o config.yml
2. embulk preview config.yml
3. embulk run config.yml
그럼 디렉토리에 embulk-example이 생성된다.
다음 명령어를 통해 embulk-example 디렉토리로 들어가면, csv파일과 seed.yml 파일이 생성되어 있는 것을 볼 수 있다.
$ cd embulk-example/
$ ls
csv seed.yml
Embulk는 기본적으로 설정에 대한 부분은 yml파일
에 명시를 해놓고 실행하는 식으로 되어 있다.
기본적으로 생성이 되는 seed.yml을 열어보면 다음과 같다.
in:
- 읽어들이는쪽의 설정 (플러그인에 따라 달라짐)out:
- 로딩하는쪽의 설정 (플러그인에 따라 달라짐)
in:
type: file # file 타입의 파일 여기서는 csv 파일
path_prefix: "/Users/jungwoon/embulk-example/csv/sample_" # csv 파일 경로
out:
type: stdout # stdout은 그냥 화면 출력
yml이 만들어졌으면 embulk guess
란 명령으로 해당 데이터에 대한 추론이 가능할 뿐 아니라 자동으로 설정까지 만들어 준다.
일단 아래 명령어를 통해 seed.yml에 대해서 확인을 한다.
$ embulk guess seed.yml
그럼 위와 같이 결과가 나온다. 이 추론을 이용해서 -o 옵션을 통해 설정 파일을 만든다.
$ embulk guess seed.yml -o config.yml
그럼 config.yml이란 파일이 생성이 되면서 위에서 추론했던 결과가 그대로 들어가게 된다.
그럼 이제 out:
부분을 수정해서 MySQL에 들어가도록 config.yml
을 수정한다.
원래 guess를 하면 time, purchase 둘 다 timestamp인데 MySQL에 두개가 한번에 들어가면 에러가 나서 purchase를 string으로 바꿔줌
in:
type: file
path_prefix: /home/Tora/embulk-example/csv/sample_
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: LF
type: csv
delimiter: ','
quote: '"'
escape: '"'
null_string: 'NULL'
trim_if_not_quoted: false
skip_header_lines: 1
allow_extra_columns: false
allow_optional_columns: false
columns:
- {name: id, type: long}
- {name: account, type: long}
- {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
- {name: purchase, type: string} # timestamp가 들어가면 에러가 나서 String으로 바꿔줌
- {name: comment, type: string}
out:
type: mysql
host: [Database IP]
port: 3306
user: [Databse ID]
password: [Database PW]
database: [Database Name]
table: [Table Name]
mode: replace
여기서 out: 부분에 Cloud SQL의 정보를 각각 입력하면 된다.
그렇다면, 이제 Cloud SQL을 세팅해보자.
먼저, 콘솔의 좌측 대시보드에서 SQL탭을 클릭 후, 좌측 상단에 있는 인스턴스 생성 버튼을 누른다.
위와 같이 MySQL 선택 -> 2세대 선택 -> 인스턴스 ID 및 root 비밀번호 설정, 지역선택 후 생성버튼을 누른다.
그러면 Cloud SQL이 생성된다.
이제 out: 부분에 입력할 것들을 세팅하면 된다. (데이터베이스 정보)
1. 생성된 SQL 인스턴스를 클릭한다.
2. 사용자 계정을 생성한다.
사용자 탭 클릭 -> 사용자 계정 생성 클릭 -> 사용자 이름과 비밀번호 설정 -> 생성
3. 데이터베이스를 만든다.
데이터베이스 탭 클릭 -> 데이터베이스 만들기 클릭 -> 데이터베이스 이름 작성 -> 만들기 클릭
4. 네트워크 승인 설정을 한다.
승인 탭 클릭 -> 네트워크 추가 -> 네트워크 이름 및 ip 입력 -> 저장 클릭
# 여기서 승인하는 네트워크는 본 글의 테스트 환경인 VM 인스턴스의 외부 IP이다.
# VM 인스턴스의 외부 IP - 이 외부 IP는 임시 IP이므로 변동이 일어난다.
(고정을 원하면 VM 인스턴스의 설정을 변경하면 된다.)
이제, config.yml에 해당 정보를 입력하면 된다.
입력을 완료한 모습
저장을 하고 다음 명령어로 실행을 시킨다.
$ embulk run config.yml
그럼 다음과 같이 진행 상황이 나온다.
그 다음 데이터가 잘 들어갔나 확인을 해보면 다음과 같이 잘 들어간 것을 확인할 수 있다.
다음 포스팅에서는 현재 들어간 Cloud SQL의 sample데이터를 GCP의 Bigquery에 넣어보는 테스트를 해보겠다.
(다음챕터 : Embulk를 이용한 MySQL -> Bigquery 데이터 삽입)
# 궁금한점은 댓글 남겨주시면 부족한 지식이지만 답변 드리겠습니다.
참고자료 :
1. Jungwoon Blog - Embulk 설치 및 기본 사용법 - https://jungwoon.github.io/bigdata/2017/08/31/Embulk_Setup/
'Embulk > Embulk 실습' 카테고리의 다른 글
3. Embulk를 이용하여 Google BigQuery에 데이터 넣기 (3) | 2017.10.11 |
---|