今回は今までSQL Serverから取得していたデータをS3にアップロードしてみます。
使用するEmbulk のプラグインは以下です。
github.com
実施作業
プラグインのインストール
最初に必要なプラグインをインストールします。
- 実行コマンド
embulk gem install embulk-output-s3
- 実行結果
PS C:\Users\Administrator> embulk gem install embulk-output-s3 2020-03-26 16:57:48.685 +0900: Embulk v0.9.23 Gem plugin path is: C:\Users\Administrator\.embulk\lib\gems Fetching: embulk-output-s3-1.5.0.gem (100%) Successfully installed embulk-output-s3-1.5.0 1 gem installed
正常にインストールできたか確認を行います。
- 実行コマンド
embulk gem list
- 実行結果
PS C:\Users\Administrator> embulk gem list 2020-03-26 17:49:17.921 +0900: Embulk v0.9.23 Gem plugin path is: C:\Users\Administrator\.embulk\lib\gems *** LOCAL GEMS *** bundler (1.16.0) did_you_mean (default: 1.0.1) embulk (0.9.23 java) embulk-input-sqlserver (0.10.1) embulk-output-s3 (1.5.0) embulk-output-sqlserver (0.8.7) jar-dependencies (default: 0.3.10) jruby-openssl (0.9.21 java) jruby-readline (1.2.0 java) json (1.8.3 java) liquid (4.0.0) minitest (default: 5.4.1) msgpack (1.1.0 java) net-telnet (default: 0.1.1) power_assert (default: 0.2.3) psych (2.2.4 java) rake (default: 10.4.2) rdoc (default: 4.2.0) test-unit (default: 3.1.1)
SQL Server上のアップロードデータを確認します。

yamlファイル作成
次にconfigファイルを生成するためのyamlファイルを作成します。
これはSQL ServerのものとGitHubのサンプルを参考にしました。(キーはダミーです)
in: type: sqlserver driver_path: C:\drivers\sqljdbc_7.2\jpn\mssql-jdbc-7.2.2.jre8.jar host: EC2AMAZ-JGN0VFT user: dbuser password: "******" database: TESTDB schema: dbo table: Employee incremental: true incremental_columns: - No - RegDate out: type: s3 path_prefix: test/TESTDB_dbo_Employee file_ext: .csv bucket: test-tmp-20200326 endpoint: s3-ap-northeast-1.amazonaws.com access_key_id: ABCXYZ123ABCXYZ123 secret_access_key: AbCxYz123aBcXyZ123 formatter: type: csv
ここの設定の中でS3のアップロード先のパス(path_prefix)を設定していますが、最後のスラッシュ以降はアップロードしたときの名前になるので注意が必要です。
あとパスで指定したフォルダ構成は、S3上に存在しなければアップロード時に自動で作成してくれるようです。
Embulk guessコマンド実行
まず以下のguessコマンドを実行して、configファイルを生成します。
- 実行コマンド
embulk guess .\try1\sqlserver_incremental_to_s3.yml -o .\config_inc_to_s3.yml
- 実行結果
PS C:\Users\Administrator> embulk guess .\try1\sqlserver_incremental_to_s3.yml -o .\config_inc_to_s3.yml
2020-03-26 18:07:06.894 +0900: Embulk v0.9.23
2020-03-26 18:07:09.262 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
2020-03-26 18:07:16.610 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\Administrator\.embulk\lib
\gems"
2020-03-26 18:07:18.753 +0900 [INFO] (main): Started Embulk v0.9.23
2020-03-26 18:07:19.005 +0900 [INFO] (0001:guess): Loaded plugin embulk-input-sqlserver (0.10.1)
in:
type: sqlserver
driver_path: C:\drivers\sqljdbc_7.2\jpn\mssql-jdbc-7.2.2.jre8.jar
host: EC2AMAZ-JGN0VFT
user: dbuser
password: ******
database: TESTDB
schema: dbo
table: Employee
incremental: true
incremental_columns: ['No', RegDate]
out:
type: s3
path_prefix: test/TESTDB_dbo_Employee
file_ext: .csv
bucket: test-tmp-20200326
endpoint: s3-ap-northeast-1.amazonaws.com
access_key_id: AbCxYz123aBcXyZ123
secret_access_key: AbCxYz123aBcXyZ123
formatter: {type: csv}
Created '.\config_inc_to_s3.yml' file.
以下のconfigファイルが作成されます。
in: type: sqlserver driver_path: C:\drivers\sqljdbc_7.2\jpn\mssql-jdbc-7.2.2.jre8.jar host: EC2AMAZ-JGN0VFT user: dbuser password: ****** database: TESTDB schema: dbo table: Employee incremental: true incremental_columns: ['No', RegDate] out: type: s3 path_prefix: test/TESTDB_dbo_Employee file_ext: .csv bucket: test-tmp-20200326 endpoint: s3-ap-northeast-1.amazonaws.com access_key_id: AbCxYz123aBcXyZ123 secret_access_key: AbCxYz123aBcXyZ123 formatter: {type: csv}
Embulk runコマンド実行
configファイルができたら、それを指定してrunコマンドを実行します。
yamlファイル、configファイルに間違いがなければ処理は正常に終了するはずです。
- 実行コマンド
embulk run .\config_inc_to_s3.yml -c .\embulk_sql_inc_s3.diff.yaml
- 実行結果
PS C:\Users\Administrator> embulk run .\config_inc_to_s3.yml -c .\embulk_sql_inc_s3.diff.yaml
2020-03-26 18:17:54.694 +0900: Embulk v0.9.23
2020-03-26 18:17:58.722 +0900 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
2020-03-26 18:18:18.144 +0900 [INFO] (main): Gem's home and path are set by default: "C:\Users\Administrator\.embulk\lib
\gems"
2020-03-26 18:18:25.243 +0900 [INFO] (main): Started Embulk v0.9.23
2020-03-26 18:18:26.321 +0900 [INFO] (0001:transaction): Loaded plugin embulk-input-sqlserver (0.10.1)
2020-03-26 18:18:26.694 +0900 [INFO] (0001:transaction): Loaded plugin embulk-output-s3 (1.5.0)
2020-03-26 18:18:27.206 +0900 [INFO] (0001:transaction): Connecting to jdbc:sqlserver://EC2AMAZ-JGN0VFT:1433 options {us
er=dbuser, password=***, applicationName=embulk-input-sqlserver, databaseName=TESTDB, loginTimeout=300, socketTimeout=18
00000}
2020-03-26 18:18:29.165 +0900 [INFO] (0001:transaction): Using JDBC Driver 7.2.2.0
2020-03-26 18:18:29.822 +0900 [INFO] (0001:transaction): Using local thread executor with max_threads=2 / tasks=1
2020-03-26 18:18:30.093 +0900 [INFO] (0001:transaction): {done: 0 / 1, running: 0}
2020-03-26 18:18:31.694 +0900 [INFO] (0014:task-0000): Writing S3 file 'test/TESTDB_dbo_Employee.000.00.csv'
2020-03-26 18:18:31.823 +0900 [INFO] (0014:task-0000): Connecting to jdbc:sqlserver://EC2AMAZ-JGN0VFT:1433 options {user
=dbuser, password=***, applicationName=embulk-input-sqlserver, databaseName=TESTDB, loginTimeout=300, socketTimeout=1800
000}
2020-03-26 18:18:32.284 +0900 [INFO] (0014:task-0000): SQL: SELECT * FROM "dbo"."Employee" ORDER BY "No", "RegDate"
2020-03-26 18:18:32.322 +0900 [INFO] (0014:task-0000): > 0.02 seconds
2020-03-26 18:18:33.784 +0900 [INFO] (0001:transaction): {done: 1 / 1, running: 0}
2020-03-26 18:18:33.925 +0900 [INFO] (main): Committed.
2020-03-26 18:18:33.956 +0900 [INFO] (main): Next config diff: {"in":{"last_record":[100,"2020-03-26 17:43:51.3266667"]}
,"out":{}}
アップロード確認
S3を確認すると指定した名前でフォルダとファイルが作成されていることがわかります。

ついでにファイルの中身も見てみます。

SQL Serverから取得したデータが1ファイルに設定されていることがわかりました。

感想及び所感
次回はparquetに変換するプラグインを使用して、S3上に指定したファイル形式でアップロードしてみます。