본문 바로가기
IT

Embulk

by Dblog 2022. 6. 20.
728x90

Embulk

ETL(Extract Transform Load)에 활용되는 툴 중의 하나로 Source 데이터를 Target에 편하게 적재할 수 있도록 지원하는 툴이다.

Java 기반 오픈소스로 Java가 설치되어 있어야 하며 java8에서 동작한다, java 9 부터는 공식적으로 지원하지 않는다. 다만 사용은 가능할 것으로 보인다.

데이터 저장공간(csv, excel, DB, file..)을 source로 사용하고 있으며 각각의 접근 방식은 따로 Plugin을 제공하여 사용한다.

Embluk 를 사용하면 몇가지 장점이 있다.

  1. 데이터의 병렬처리가 가능하다.
  2. 데이터 검증
  3. 에러 복구

하지만 상세하지 않은 에러로그와 부족한 Reference는 사용하는데 어려움이 따른다.

 

Configuration은 yml 파일을 사용하며 in, out 값으로 source와 target을 지정할 수 있다.

명령어를 입력해 embulk를 실행 시킬 수 있고 성공, 혹은 실패에 따른 로그를 화면에 출력한다.

in, out에 사용되는 파일 혹은 DB들은 plugin의 옵션에 따라 작성된다.

Test Code

테스트 환경

Docker

  • mysql Container

mysql 8.0.28

  • Linux Container

ubuntu 22.04

java8

Embulk 설치 및 설정

Embluk 소스 파일을 설치하고 bash에 환경설정 한다.

# 소스 다운로드
curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"

# 권한 설정
chmod +x ~/.embulk/bin/embulk

# 환경설정
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc

# 환경 등록
source ~/.bashrc

 

Embluk는 정확히 설치되었는지 확인 할 수 있는 테스트 코드를 제공한다.

embulk example ./try1
embulk guess ./try1/seed.yml -o config.yml
embulk preview config.yml
embulk run config.yml

 

Embulk 실행

embulk run test.yml

 

test.yml
in:
  type: file
  path_prefix: /home/embulk/  #prefix 뒤에 파싱될 타입의 이름을 따른다. /home/embulk/test_ 로 작성하면 test_ 부터 시작하는 .csv파일을 찾는다.
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    skip_header_lines: 1
    columns:   # name은 타겟의 컬럼이름을 설정하였다. 
    - {name: id, type: long}
    - {name: test_text, type: string}

out:
  type: mysql
  host: 172.17.0.2
  user: root
  password: "ehddus4100"
  database: tests
  table: test_table
  options: {connectTimeout: 20000}
  mode: insert
  column_options:
    id: {type: 'INT'}
    test_text: {type: 'VARCHAR(255)'}
default_timezone: Asia/Seoul

 

test.csv
id,tt // head, colum과 같은 내용으로 실제로 입력이 필요하진 않는것 같다.
1,111111
2,22222
3,33333
4,4444
5,5555
6,6666
7,7777
8,8888
9,9999
10,1010
11,1111
12,1212
13,1313
14,1414
15,1515
16,1616
17,1717
18,1818
19,1919
20,2020
21,2121

 

테스트 결과 파일로 다른 위치에 있는 csv을 다른 컨테이너에 있는 mysql에 입력해놓은 결과를 볼 수 있다.

 

Reference

https://www.embulk.org/

 

728x90

댓글