embulk 로 간단한 요구 사항 하나 해결해보면서 쉬운 사용법과 괜찮은 성능 맛 본 김에 또다른 작업에 활용해보려고 테스트 중.
외부 업체에서 Rest 방식으로 제공하는 데이터를 받아서 DB 에 저장하는 작업인데 Rest 클라이언트 만들어 처리하는게 그리 어려운 작업은 아니지만 별다른 추가 개발 없이 DB 저장 성능까지 충분히 보장된다는 면에서 충분히 검토해볼만 가치 있다고 판단해서 착수.
딱히 마땅한 레퍼런스가 안 찾아져서 우선 보이는 위 플러그인을 이용해보기로 했다.
% embulk gem install embulk-input-http
github 에 있는 설정 파일 샘플을 이용해서 테스트 실행해보면 'ParserPlugin 'none' is not found' 이라며 파서 부분에서 에러가 난다.
Rest Api 호출해서 JSON 포맷으로 결과 받으니 json 관련 파서 필요할 듯 싶어서 검색.
% embulk gem install embulk-parser-jsonpath
파서 추가 설정 후 테스트해보니 stdout 으로 지정한 컬럼값 잘 출력된다.
이전에 mariadb 이용 위해서 MySQL 플러긴인 아래처럼 이미 설치해놓은 상태
% embulk gem install embulk-output-mysql
업체에서 아직 API 공개해놓지는 않은 상태라 테스트용으로 FastAPI 로 API 하나 급조.
{"id":"OPS1","mode":"S","size":2, "data":[ {"block":"X1","maxRow":25,"minRow":6,...}, {"block":"X2","maxRow":12,"minRow":5,...} ] }
세세한 설정 빼고 꼭 필요한 값만으로 아래와 같이 테스트 설정 파일 작성함.
exec: {}
in:
type: http
url: http://localhost:8000/Ops1
parser:
type: jsonpath
root: "$.data"
columns:
- {name: block, type: string, path: block}
- {name: max_row, type: long, path: maxRow}
- {name: min_row, type: long, path: minRow}
out:
type: mysql
host: ...
port: 3306
user: ...
password: ...
database: ...
table: t_block
mode: insert
MariaDB 에 테이블 만들고 실행해보니 깔끔하게 잘 들어간다.
약간의 값 전환 작업이 필요한데 embulk 에서 파이프라인 식으로 흐름 제어할 수 있는 방법이 있나 찾아봐야겠다. 아니면 java 에서 API 이용해서 직접 embulk 제어하는 방법이 있는지도.
덧.
Ruby 를 사용한 것도 그렇고 레퍼런스 중 상당수가 일본어 문서인 점도 그렇고 해서 일본인이 만든 걸거라 생각하고 좀 찾아보니 treasuredata 라는 회사에서 오픈 소스로 공개한 솔루션 중 하나였다.
그런데, www.treasuredata.com/opensource/ 들어가보니 보통 엔지니어들이 아니다!
fluentd, MassagePack 그리고 JeroMQ ... 헉!!!
'OpenSource' 카테고리의 다른 글
embulk 설정 파일에서 변수, include 사용하는 방법 (0) | 2021.04.13 |
---|---|
[java]embulk plugin 수정 사용 트릭 (0) | 2021.04.08 |
참조 라이브러리들의 라이센스 일괄 확인법(pom.xml) (0) | 2021.03.22 |
vagrant 로 생성한 VirtualBox VM에 ssh 접속 (0) | 2021.03.16 |
Helm chart repository deprecation 관련 메모 (0) | 2021.02.26 |