Embulkのexampleのメモ。
|
|
Embulkでデータ転送を行う為には、転送元データ・転送先を定義ファイルに記述する必要がある。
定義ファイルはYAMLという形式のファイルで、拡張子はyml。
$ embulk run hoge.yml
この定義ファイルには、ファイルの場合はパス、RDBの場合は接続情報やテーブル等を記述する。
また、データのレイアウト(レコード定義、テーブルレイアウトといったもの)も記述する。
Embulkでは、実際のファイルを指定すると、それを読み込んでデータ定義を推測して定義ファイルを生成してくれる機能がある。
$ embulk guess tmp.yml -o hoge.yml …tmp.ymlに書かれたファイルを読み込み、hoge.ymlを生成する
(guessコマンドで読み込みたい入力データも、guess用のymlファイルを作って指定する)
もちろん、guessコマンドを使わずに、自分で定義ファイルを全て記述してもよい。
というか、日次バッチ等の定型処理としてEmbulkを使うなら、事前に定義ファイルを作成しておくことになるだろう。
(SIerならファイルレイアウトやテーブルレイアウトをExcelで管理しているだろうから、そこからymlファイルを生成すればいい)
Embulkのコマンドには、初心者が初めて試すためのサンプルデータおよび定義ファイルを生成する機能がある。
embulkのexampleコマンドを実行すると、それらが生成される。
それらを使って、guessコマンドやrunコマンドを実行することが出来る。
embulkのexampleコマンドを使ってサンプルデータを生成し、それを転送する為の定義ファイルを作ってデータ転送してみる。
最初に、サンプルデータおよび最初の定義ファイルを生成する。
embulkコマンドの引数として「example」を指定し、その後ろにサンプルデータ類を生成する場所(ディレクトリー)を指定する。
$ embulk example /tmp/hoge
これを実行すると、以下のようなディレクトリーおよびファイルが作られる。
csvディレクトリーにあるのが入力データとなるファイル。
example.ymlの中はこんな感じ。(このファイルは、guessコマンドの入力として使用する)
$ cd /tmp/hoge $ cat example.yml in: type: file path_prefix: "/tmp/hoge/csv/sample_" out: type: stdout
入力ファイル(のファイル名の先頭部分)が「/tmp/hoge/csv/sample_
」。
出力先は標準出力(コンソール)。
Embulkには、実際のファイルを読み込んでファイルレイアウトを推測し、定義ファイルを生成する機能がある。
embulkのguessコマンドを使用する。
guessコマンドでも、読み込むファイルを指定するのにymlファイルを使う。
サンプルの場合は、example.ymlというファイルがそれ。
$ cd /tmp/hoge $ embulk guess example.yml -o sample_csv.yml
「embulk guess example.yml
」だけで実行すると、推測した結果がコンソールに表示される。
「-o」オプションを付けると、コンソールだけでなく指定したファイルにも出力される。
$ cat sample_csv.yml in: type: file path_prefix: /tmp/hoge/csv/sample_ decoders: - {type: gzip} parser: charset: UTF-8 newline: CRLF type: csv delimiter: ',' quote: '"' trim_if_not_quoted: false skip_header_lines: 1 allow_extra_columns: false allow_optional_columns: false columns: - {name: id, type: long} - {name: account, type: long} - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'} - {name: purchase, type: timestamp, format: '%Y%m%d'} - {name: comment, type: string} out: {type: stdout}
このsample_csv.ymlをrunコマンド(やpreviewコマンド)に指定することで、実際のデータ転送を行う。
実際のデータ転送を行わず、試しに入力データを読み込んでみる(dry-runする)のがpreviewコマンドの役割。
読み込んだデータは(表形式っぽい感じで)コンソールに表示される。
$ cd /tmp/hoge $ embulk preview sample_csv.yml 2015-08-08 18:31:49.287 +0900: Embulk v0.6.21 2015-08-08 18:31:50.252 +0900 [INFO] (preview): Listing local files at directory '/tmp/hoge/csv' filtering filename by prefix 'sample_' 2015-08-08 18:31:50.258 +0900 [INFO] (preview): Loading files [/tmp/hoge/csv/sample_01.csv.gz] +---------+--------------+-------------------------+-------------------------+----------------------------+ | id:long | account:long | time:timestamp | purchase:timestamp | comment:string | +---------+--------------+-------------------------+-------------------------+----------------------------+ | 1 | 32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC | embulk | | 2 | 14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC | embulk jruby | | 3 | 27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin | | 4 | 11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC | NULL | +---------+--------------+-------------------------+-------------------------+----------------------------+
実際のデータ転送を行うのがrunコマンド。
$ cd /tmp/hoge $ embulk run sample_csv.yml 2015-08-08 18:32:10.685 +0900: Embulk v0.6.21 〜 1,32864,2015-01-27 19:23:49,20150127,embulk 2,14824,2015-01-27 19:01:23,20150127,embulk jruby 3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin 4,11270,2015-01-29 11:54:36,20150129,NULL 〜
sample_csv.ymlの中で出力先が標準出力(コンソール)になっているので、コンソールに表示されている。
sample_csv.ymlのoutをファイルに変えてやれば、ファイルに出力される。
〜 out: type: file path_prefix: /tmp/hoge/output/sample_ file_ext: csv formatter: type: csv header_line: false
$ mkdir -p /tmp/hoge/output …出力先のディレクトリーは事前に存在している必要がある $ embulk run sample_csv.yml 2015-08-08 18:46:08.295 +0900: Embulk v0.6.21 〜 $ ls /tmp/hoge/output/ sample_000.00.csv $ cat /tmp/hoge/output/sample_000.00.csv 1,32864,2015-01-27 19:23:49.000000 +0000,2015-01-27 00:00:00.000000 +0000,embulk 2,14824,2015-01-27 19:01:23.000000 +0000,2015-01-27 00:00:00.000000 +0000,embulk jruby 3,27559,2015-01-28 02:20:02.000000 +0000,2015-01-28 00:00:00.000000 +0000,"Embulk ""csv"" parser plugin" 4,11270,2015-01-29 11:54:36.000000 +0000,2015-01-29 00:00:00.000000 +0000,NULL
実際に出力されるファイル名には000.00のような数字が付く。
(ymlファイルに指定するパスは「path_prefix」(接頭辞)、つまりファイル名の先頭部分だけを指定しており、末尾にはEmbulkが自由にIDを付けるのだろう(分割してデータ転送すれば、IDが異なる複数のファイルが作られると思う))