先日embulkの使い方について苦しみました。その代償に最低限使えるようになったため、備忘録とほかの人へ向けてのメッセージとして記録を残しておきます。
本記事は非常に柔らかく記載しているため、正式には間違っている部分が存在すると思います。導入の手助けとしてお使いください。
その後公式やほかの記事を読んで正しい知識をつけることをおすすめします。
1.何ができるのか?
embulkとはファイルやデータベースからデータを抽出し、別のファイルやデータベースへ転送することのできるツールです。
ファイルからデータベースへの取込をコマンドベースで実装できたり、
テーブル連携のできないデータベース同士でのデータ連携をサポートできます。
2.どのように使うのか?
Embulkは転送機能を持ったアプリケーションであり、単体では機能しません。
何をどこへ転送するかの設定ファイルがあり始めて実行することができます。
そのため、設定ファイルの記述方法がわかれば、Embulkを使うことができるようになります。
設定ファイルは、ymlというマークアップ言語で記載します。
主に3つのブロック "in" "filter" "out" のブロックを記載すれば設定完了です。
ここで注意が必要となります。
embulkは初期状態だとCSV程度しかまともに扱うことができません。
データベースやファイルストレージを利用するためには、個別にプラグインの導入が必要です。
利用用途に応じてプラグインを導入しましょう。
in や outの記述方法については、利用するデータ(プラグイン)に従います。
そのため全体導入の記事を見るだけでは記述方法が記載されていない場合が多いです。ですので、プラグインのReadMeや専用の解説ページを参照するとよいです。
3.embulkのインストール
まず前提として、embulkはjavaを利用しています。
そのためjavaをインストールしてある必要があるため注意が必要です。
embulkはスタンドアロンのアプリケーションとなります。
(windowsならばembulk.batです。 Linux系ならばembulk)
そのため、インストール後は環境変数を設定し、emblk コマンドで実行ファイルを呼び出せるようにすると便利です。
また、インストール後の動作確認として、
embulk --version
が気軽にできる動作確認になります。
先ほど記載したように、embulkは設定ファイルをもとにデータ転送をするため、
データ転送で動作確認となると少しハードルが高いです。
(後述しますが、設定ファイルを作るのにもembulkの機能を使うため、動作確認は上記方法をおすすめします)
4.設定ファイルの作成方法
以下手順で作成します。
- 最低限のインプット情報を記載したymlファイルの作成
- input ファイルに情報を付与し、仕上げる
- (任意)フィルターをかける
- input情報のプレビューを確認する
- output情報を記載する
1.最低限のインプット情報を記載したymlファイルの作成
以下のように記述し、sample.ymlというファイル名で保存する
記述はyamlという記述形式(xmlと同系統)
ファイルパスは、インプットとなるファイル
in:
type: file
path_prefix: ファイルパス
out:
type: stdout
2 input ファイルに情報を付与し、仕上げる
embulk guess sample.yml -o sample_exe.yml
を実行すると、embulkがインプットファイルを参照し、データ構造を推測する。
推測結果はsample_exe.ymlのinへ追記される。
追記された情報はあくまで推測であるため、正しくなるよう修正する。
3 (任意)フィルターをかける
sample_exe.ymlにフィルター情報を記載する。
フィルター情報とは、インプットに対して、カラムの追加やカラム名の変更を実施すること。
特に、DBへファイルを書き込む場合は、インプットのカラム名とアウトプットのカラム名が
同じでないと書き込めないため、合わせこむ必要がある。
他にもデータの並び替え等ができるはずであるが未調査。
4 input情報のプレビューを確認する
embulk preview sample_exe.yml
を実行すると、出力する内容を確認することができる。
5 output情報を記載する
出力情報を記載する。
出力情報は、出力する対象によって記載方法が変わるため、都度調査が必要となる。
以下はpostgresの例
DBへの接続情報とカラムのデータ形式を記載する。
out:
type: postgresql
mode: insert
default_timezone: "Asia/Tokyo"
host: localhost port: 5432
user: postgres
password: "pass"
database: db_name
schema: schema_name
table: table_name
columns:
- {name: column1, type: character}
- {name: column2, type: text}
以上です。