3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Embulkと日付データ(その1: CSVの入力データ)

Last updated at Posted at 2015-07-14

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時間足した時刻が日本時刻となる。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?