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]