Embulkのローカルファイル読み込みのメモ。
|
|
ローカルファイルはデフォルトで(追加プラグイン無しで)読み込める。
ファイルの形式はパーサーで指定する。
圧縮されているファイルを読み込みたい場合はデコーダーを指定する。
embulkのguessコマンドでローカルファイルを読み込み、レイアウトを推測してymlファイルを生成することが出来る。
in: type: file path_prefix: /tmp/example/master/store_info parser: type: csv charset: UTF-8 newline: CRLF delimiter: ',' quote: '"' escape: '\' null_string: 'NULL' skip_header_lines: 0 columns: - {name: store_code, type: string} - {name: store_name, type: string} out: type: stdout
$ cat /tmp/example/master/store_info* 123,aaa 456,zzz 789,"a,b c" 890,"a\"b\"c" 999,NULL $ embulk preview config.yml 〜 +-------------------+-------------------+ | store_code:string | store_name:string | +-------------------+-------------------+ | 123 | aaa | | 456 | zzz | | 789 | a,b c | | 890 | a"b"c | | 999 | | +-------------------+-------------------+
オプション名 | 説明 | ymlの記述例 | デフォルト値 |
---|---|---|---|
type |
type: file |
(必須) | |
path_prefix |
読み込むファイルのパスの先頭部分。 |
path_prefix: /tmp/example/master/store_info |
(必須) |
decoders |
ファイルが圧縮されている場合、圧縮形式を指定する。 |
decoders: - {type: gzip} |
|
parser |
ファイルの形式を定義する。 →CSVパーサーのオプション |
parser: type: csv |
(必須) |
last_path |
ファイルが複数ある(末尾に連番が付いているような)場合、 last_pathで指定されたファイルまではスキップする(読み込まない)。 |
csv(あるいはtsv)ファイル用のparserのオプション。
オプション名 | 説明 | ymlの記述例 | デフォルト値 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type |
type: csv |
(必須) | |||||||||||
delimiter |
データの区切り文字。 |
delimiter: ',' |
',' |
||||||||||
quote |
データを囲む文字。 quoteで囲まれている場合、データに改行が含まれていても大丈夫。 |
quote: '"' |
'"' |
||||||||||
escape |
エスケープ文字。 quoteが「 " 」でescapeが「\ 」のとき、「"a\"b" 」というデータは「a"b 」になる。 |
escape: '\' |
'\' |
||||||||||
skip_header_lines |
読み飛ばす行数。 ヘッダー行(1行)をスキップしたい場合は1を指定する。 |
skip_header_lines: 1 |
0 |
||||||||||
null_string |
nullを表す文字列。 データがこの文字列と一致した場合、null扱いされる。 |
null_string: 'NULL' |
|||||||||||
trim_if_not_quoted |
trueの場合、quoteされていないデータに対し、空白除去を行う。 |
trim_if_not_quoted: true |
false |
||||||||||
comment_line_marker |
行コメントとなる文字列。 行の先頭にこの文字列がある場合、スキップされる。 |
comment_line_marker: '#' |
|||||||||||
allow_optional_columns |
実際の列数が定義より少ない場合にスキップするかどうか。 trueにするとnull扱いして読み込む。falseだと行全体をスキップする(警告扱い)。 |
allow_optional_columns: true |
false |
||||||||||
allow_extra_columns |
実際の列数が定義より多い場合にスキップするかどうか。 trueにすると多い列は無視して読み込む。falseだと行全体をスキップする(警告扱い)。 |
allow_extra_columns: true |
false |
||||||||||
max_quoted_size_limit |
データがこのサイズ(byte)を超えたら、行全体をスキップする。 | 131072 |
|||||||||||
default_timezone |
timestamp項目のデフォルトのタイムゾーン。 (columnsで、項目ごとにタイムゾーンを指定することも出来る) このタイムゾーンとしてデータを読み込み、内部ではUTCで保持する。 |
default_timezone: 'Asia/Tokyo' |
UTC |
||||||||||
newline |
行の区切り文字。CRLF, LF, CRのいずれか。 |
newline: CRLF |
CRLF |
||||||||||
charset |
ファイルのエンコーディング。 |
charset: UTF-8 |
UTF-8 |
||||||||||
columns |
項目定義を行う。
|
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'} |
(必須) |
columnsでtimestampとした項目は、日時(ナノ秒まで)を保持する項目となる。
Embulk内部ではUTCとして保持されるようだ。
したがって、日付のみ(時刻を持たない)の項目として以下のような書式を定義した場合、少し注意を要する。
in: type: file 〜 columns: - {name: id, type: long} - {name: account, type: long} - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S', timezone: 'Asia/Tokyo'} - {name: purchase, type: timestamp, format: '%Y%m%d', timezone: 'Asia/Tokyo'} - {name: comment, type: string}
$ $HOME/.embulk/bin/embulk preview sample_csv.yml 2015-08-09 11:30:44.882 +0900: Embulk v0.6.21 〜 +---------+--------------+-------------------------+-------------------------+----------------------------+ | id:long | account:long | time:timestamp | purchase:timestamp | comment:string | +---------+--------------+-------------------------+-------------------------+----------------------------+ | 1 | 32,864 | 2015-01-27 10:23:49 UTC | 2015-01-26 15:00:00 UTC | embulk | | 2 | 14,824 | 2015-01-27 10:01:23 UTC | 2015-01-26 15:00:00 UTC | embulk jruby | | 3 | 27,559 | 2015-01-27 17:20:02 UTC | 2015-01-27 15:00:00 UTC | Embulk "csv" parser plugin | | 4 | 11,270 | 2015-01-29 02:54:36 UTC | 2015-01-28 15:00:00 UTC | NULL | +---------+--------------+-------------------------+-------------------------+----------------------------+
purchaseという項目は「%Y%m%d」という定義なので日付のみのつもりだったかもしれないが、内部では時刻まで保持されている。
(timestamp型は日時を保持するので、当然と言えば当然なのかもしれない)
※previewコマンドでは、timestampの値(Embulkの内部のデータ)がそのまま表示される。
※columnsのformatで指定した日付書式は、csvファイル内の文字列をtimestampに変換する際に使われる(出力用の書式ではない)[2017-07-16]