Embulkのローカルファイル書き込みのメモ。
|
|
ローカルファイルはデフォルトで(追加プラグイン無しで)出力できる。
ファイルの形式はフォーマッターで指定する。
圧縮して出力したい場合はエンコーダーを指定する。
ローカルファイル出力で出力されるカラム(項目)は、入力データの全カラムになる。
カラム名も入力時に付けられたカラム名が使用される。
カラム名を変えたり、カラムの並び順を変えたり、出力するカラムを選択したりしたい場合は、フィルターを使う。
in: 〜 out: type: file path_prefix: /tmp/example/result/store_info file_ext: csv formatter: type: csv charset: UTF-8 delimiter: ',' newline: CRLF quote: '"' escape: '\'
$ embulk run config.yml $ ls /tmp/example/result/ store_info000.00.csv $ cat /tmp/example/result/store_info000.00.csv 123,aaa 456,zzz 789,"a,b c" 890,"a\"b\"c" 999,
出力先のディレクトリーは実行前に作っておく必要がある。
オプション名 | 説明 | ymlの記述例 | デフォルト値 |
---|---|---|---|
type |
type: file |
(必須) | |
path_prefix |
出力するファイルのパスの先頭部分。 |
path_prefix: /tmp/example/result/store_info |
(必須) |
file_ext |
ファイルの拡張子。 |
file_ext: csv |
(必須) |
formatter |
ファイルの形式を定義する。 →CSVフォーマッターのオプション |
formatter: type: csv |
(必須) |
encoders |
圧縮して出力したい場合、その形式を指定する。 (gzipの場合、レベルは0(無圧縮)〜9。デフォルトは6) |
encoders: - {type: gzip, level: 6} |
csv(あるいはtsv)ファイル用のformatterのオプション。
オプション名 | 説明 | ymlの記述例 | デフォルト値 | ||||||
---|---|---|---|---|---|---|---|---|---|
type |
type: csv |
(必須) | |||||||
delimiter |
データの区切り文字。 |
delimiter: ',' |
',' |
||||||
quote |
データを囲む文字。 どのデータを囲むかはquote_policyで指定する。 |
quote: '"' |
'"' |
||||||
quote_policy |
データをquoteで囲むルール。
|
quote_policy: ALL |
MINIMAL |
||||||
escape |
quoteで囲むときに使われるエスケープ文字。 (デフォルト値がCSVパーサーのescapeとは違うので注意) |
escape: '\' |
'"' |
||||||
header_line |
trueの場合、カラム名をヘッダー行として出力する。 (quote_policyをALLにしていると、カラム名もquoteで囲まれる) |
header_line: false |
true |
||||||
null_string |
nullを表す文字列。 データがnullだった場合、この文字列が出力される。 (quote_policyをALLにしていても、この文字列はquoteで囲まれない) |
null_string: 'NULL' |
(空文字列) | ||||||
newline |
行の区切り文字。CRLF, LF, CRのいずれか。 |
newline: CRLF |
CRLF |
||||||
newline_in_field |
データ内に改行がある場合、それに使う改行コード。CRLF, LF, CRのいずれか。 |
newline_in_field: LF |
LF |
||||||
charset |
ファイルのエンコーディング。 |
charset: UTF-8 |
UTF-8 |
||||||
default_timezone |
timestamp項目のデフォルトのタイムゾーン。 (column_optionsで、項目ごとにタイムゾーンを指定することも出来る) 内部ではUTCで保持されているが、このタイムゾーンとして出力する。 |
default_timezone: 'Asia/Tokyo' |
UTC |
||||||
column_options |
timestamp項目に対して出力用のフォーマットを定義する。 「 カラム名: {オプション} 」という形式。
|
column_options: time: {format: '%Y-%m-%d %H:%M:%S'} purchase: {format: '%Y%m%d'} |
※出力するカラムを選択したい場合はフィルターを使う。
timestamp型は、Embulk内部ではエポック秒(+ナノ秒)で保持されている。[2017-07-16]
CSVパーサープラグイン(入力ファイル)でtimestamp型のformatを指定した場合、そのformatは入力の文字列をパースしてtimestampへ変換する際に使われる。
(previewで表示すると、timestampの値はタイムゾーンUTCの日時として表示される)
CSVフォーマッタープラグイン(出力ファイル)では、column_optionsでformatを指定しないと、デフォルトの形式で出力される。
つまり、パーサーのformatは入力文字列のパースに使用され、フォーマッターのformatは出力用の文字列を生成するのに使用される。
パーサーのformatで指定した形式でファイルに出力されるわけではない。
(そもそも、入力がCSVファイルでない(RDBとかの)場合はtimestampであってもパーサーにformatを指定しない(必要ない)ことがある)
Asakusa Frameworkで読み込める形式のCSVファイルを作るには、以下のようなオプションを指定すればよい。[2015-09-27]
in: 〜 out: type: file path_prefix: /hadoop/hoge file_ext: csv formatter: type: csv header_line: false charset: UTF-8 delimiter: ',' newline: CRLF quote: '"' escape: '"' default_timezone: 'Asia/Tokyo'
HDFSで扱う場合、HadoopのNFSマウント機能を使ってNFS上に(ローカルファイルとして)CSVファイルを出力し、AsakusaFWのDirect I/OでHDFS上のファイルとして読み込むのが一番簡単。
M3BPでは直接ローカルファイルシステム上のファイルを読み書きするので、このままでよい。[2021-12-19]