Embulkの日付データの取り扱いに関するメモ
まとめ
CSVデータで「2015-01-27 19:23:49」のようなタイムゾーンが未指定のデータを日本時刻の日付型(timestamp)として取り扱う場合は、パーサーのオプションdefault_timezone: "Japan"
を指定する。
解説
サンプルデータの作成
embulk example pgtest
2015-07-14 22:01:04.483 +0900: Embulk v0.6.16
Creating pgtest directory...
Creating pgtest/
Creating pgtest/csv/
Creating pgtest/csv/sample_01.csv.gz
Creating pgtest/example.yml
Run following subcommands to try embulk:
1. guess pgtest/example.yml -o config.yml
2. preview config.yml
3. run config.yml
中身の確認
gzip -dc pgtest/csv/sample_01.csv.gz
id,account,time,purchase,comment
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
- id1のデータは、2015年1月27日 19時23分49秒になっている。
- タイムゾーンは未指定
guessにて設定ファイルを作成
embulk guess pgtest/example.yml -o config.yml
次のような設定ファイルができる。
in:
type: file
path_prefix: /path/to/csv/sample_
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
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}
プレビューを実行して確認をする。
embulk preview -G config.yml
*************************** 1 ***************************
id ( long) : 1
account ( long) : 32,864
time (timestamp) : 2015-01-27 19:23:49 UTC
purchase (timestamp) : 2015-01-27 00:00:00 UTC
comment ( string) : embulk
- id1のデータは2015年1月27日 19時23分49秒と表示されるが末尾にUTCとついている。
- UTCは、Universal Time, Coordinated
- 日本の時刻はUTCから9時間足した時刻となる。
- 「2015-01-27 19:23:49 UTC」は、日本時刻、2015年1月28日 午前4時23分49秒になる
default_timezoneの指定
*「2015-01-27 19:23:49」を日本の時刻として指定したい場合はdefault_timezoneを指定する
-
default_timezone: "Japan"
をparserの設定に追加する
追加した設定
in:
type: file
path_prefix: /path/to/csv/sample_
decoders:
- {type: gzip}
parser:
default_timezone: "Japan" # <-- 追加した設定
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
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}
再度プレビュー
embulk preview -G config.yml
*************************** 1 ***************************
id ( long) : 1
account ( long) : 32,864
time (timestamp) : 2015-01-27 10:23:49 UTC
purchase (timestamp) : 2015-01-26 15:00:00 UTC
comment ( string) : embulk
9時間戻った時刻が表示される。プレビューはUTC表示なので、9時間足した時刻が日本時刻となる。