728x90
Embulk
ETL(Extract Transform Load)에 활용되는 툴 중의 하나로 Source 데이터를 Target에 편하게 적재할 수 있도록 지원하는 툴이다.
Java 기반 오픈소스로 Java가 설치되어 있어야 하며 java8에서 동작한다, java 9 부터는 공식적으로 지원하지 않는다. 다만 사용은 가능할 것으로 보인다.
데이터 저장공간(csv, excel, DB, file..)을 source로 사용하고 있으며 각각의 접근 방식은 따로 Plugin을 제공하여 사용한다.
Embluk 를 사용하면 몇가지 장점이 있다.
- 데이터의 병렬처리가 가능하다.
- 데이터 검증
- 에러 복구
하지만 상세하지 않은 에러로그와 부족한 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
728x90
'IT 이야기' 카테고리의 다른 글
키보드 없이 홈페이지 만들고 싶다. 노코드 솔루션, 팝업 솔루션 소개 (2) | 2023.10.11 |
---|---|
[mysql] root 권한을 가진 User 추가하기 (0) | 2022.10.29 |
개발자도구 console에서 API 테스트하기 (0) | 2022.06.09 |
[Docker] 도커란? 도커의 등장과 사용법 (0) | 2022.02.26 |
mac 단축키 (0) | 2022.01.27 |
댓글