業務でよくAzure SQL Databaseを使っていて、DB間でさくっとデータを転送したい場面が度々あり、以前はAzure Data Factoryとか使っていたのだが たまにしか使わないし設定面倒だしなぁとか思っていた。
Embulkだと環境用意するの大変かなとか思っていたが、割とDocker使えばいけるじゃんと思ったので、自分用でとりあえずリポジトリ作ってすぐ使えるように用意した
使い方
まずはgit clone
$ git clone git@github.com:rnakamine/docker-embulk-sqlserver.git
次にそれぞれDBの接続情報やテーブル情報などを書いていく。
config.yml
in: type: sqlserver host: localhost user: myuser password: "" database: my_database table: my_table select: "col1, col2, col3" where: "col4 != 'a'" order_by: "col1 DESC" out: type: sqlserver host: localhost user: myuser password: "" database: my_database table: my_table mode: insert
今回はSQLServerのEmbulkプラグインを使っており、その他のオプションはこちらを参考にすると良い
- embulk-input-jdbc/embulk-input-sqlserver at master · embulk/embulk-input-jdbc
- embulk-output-jdbc/embulk-output-sqlserver at master · embulk/embulk-output-jdbc
Docker Composeで実行できるようにしたので、以下のコマンドを実行するだけ
$ docker-compose run --rm embulk run config.yml
Dockerfileの中身
OpenJDKのベースイメージを用意してEmbulkをwget
でインストールする。
ちなみにEmbulkのv0.9およびv0.10はJava8で動かす必要があるようでJava9は公式にはサポートされていない。
FROM openjdk:8-jre-alpine ENV EMBULK_VERSION=0.9.23 RUN wget -q https://dl.embulk.org/embulk-${EMBULK_VERSION}.jar -O /usr/local/bin/embulk \ && chmod +x /usr/local/bin/embulk RUN apk add --no-cache libc6-compat \ && embulk gem install \ embulk-input-sqlserver \ embulk-output-sqlserver ENV TZ=Asia/Tokyo WORKDIR /work ENTRYPOINT ["java", "-jar", "/usr/local/bin/embulk"]
今回はAzure SQL Databaseを使うためにSQL Serverのinput/outputプラグインをインストールしているが、 そこは用途に合わせて必要なプラグインをインストールすれば良い。