カピバラ好きなエンジニアブログ

ITのこととか趣味のカメラのことなどを赴くままに書いていきます。カピバラの可愛さこそ至高。

EmbulkでSQLServerから読み込んだデータをコンソールに出力してみた

前回Embulkのサンプルを実行した内容を元に、以前作成したSQL Serverのデータを取得・出力する処理をEmbulkで実装してみます。

Embulkでは様々なプラグインが開発されており、今回はその中の以下のプラグインを使用してSQLServerからの読み込みを行います。
github.com

どのようなプラグインがあるか知りたいという人は以下の記事を参照
qiita.com

実施作業

プラグインインストール

まずはgemを使用してプラグインのインストールを行っていきます。
以下のコマンドを実行します。

embulk gem install embulk-input-sqlserver

成功していれば『a gem installed』と出力されています。
f:id:live-your-life-dd18:20200311175559p:plain

プラグインインストール確認

念のためインストールできたか以下のコマンドで確認します。

embulk gem list

リストに入っていれば次にいきます。
f:id:live-your-life-dd18:20200311175804p:plain

JDBC Driverダウンロード

さて次は設定ファイルを作成して...といきたいところですが、SQL Serverを読み込むためには専用のJDBCドライバーが必要のようなので、以下の公式ページからダウンロードします。
※インストールしているJREのバージョンを元にダウンロードしてください

docs.microsoft.com

今回は下記のディレクトリに格納しました。

C:\drivers\sqljdbc_7.2\jpn

f:id:live-your-life-dd18:20200311180453p:plain

SQL Server設定確認

ログイン用のユーザと読み込み用DBを設定します。
※設定手順は省略
f:id:live-your-life-dd18:20200315003530p:plain

以下のクエリで取得できるデータと同じデータを取得するように設定します。

use AdventureWorks2012
select ProductID, Name, ProductNumber from Production.Product where ProductID < 500;

f:id:live-your-life-dd18:20200315003551p:plain

設定ファイル作成

すべての元となる設定ファイルを作成し、前回のサンプル実行時に使用したフォルダに格納します。
f:id:live-your-life-dd18:20200311181742p:plain

設定内容は以下の通り
特に難しいことはなく、インプットはドライバーパス・接続情報・読み込むデータの情報を設定、アウトプットは前回同様stdoutでコンソールに出力するように設定します。
f:id:live-your-life-dd18:20200311181820p:plain

設定ファイル生成コマンド実行

以下のコマンドで最初に定義した内容を元に設定ファイルを作成します。

embulk guess ./try1/sqlserver.yml -o config.yml

ファイルが作成されたことを確認します。
f:id:live-your-life-dd18:20200311182347p:plain

ファイルの内容は以下の通り
f:id:live-your-life-dd18:20200311182630p:plain

Dry Run実行

以下のコマンドで正常に実行可能か確認します。

embulk preview config.yml

先ほどSSMSで確認した内容と一緒なので、設定ファイルは特に問題なさそうです。
f:id:live-your-life-dd18:20200311182759p:plain

Embulk実行

以下のコマンドを実行します。

embulk run config.yml

Dry Runで確認した内容が想定通り出力されていることが確認できました。
f:id:live-your-life-dd18:20200311183124p:plain

感想及び所感

どのぐらいの規模のデータの読み出しが可能かはまだ確認できていませんが、まずはSQLServerからデータが読み出せることを確認しました。
次回は今回コンソールに出力した内容をCSVファイルとして出力してみようと思います。