まずはEmbulkのプラグインを入れる
$ embulk gem install embulk-filter-timestamp_format
次にEmbulkの設定ファイルを書く
in(type: csv)では当該列はtype:string
とする
そして以下のフィルタを記述する
filters:
- type: timestamp_format
default_from_timestamp_format: ['%Y-%m-%d %H:%M:%S']
default_from_timezone : 'America/Chicago'
stop_on_invalid_record : true
columns:
- {name: mycolname, type: long}
これで実行すると、例えばCSVに2016-12-22 05:27:36
と書いてある場合、TreasureDataには1482406056
が入る
これを以下のようにRubyで確認すると、UTCなら6時間、JSTなら15時間ずれていることが確認できる
$ ruby -e 'puts Time.at(1482406056).utc'
2016-12-22 11:27:36 UTC
$ ruby -e 'puts Time.at(1482406056)'
2016-12-22 20:27:36 +0900
$ ruby -e "require 'time'; puts Time.parse('2016-12-22 20:27:36 +0900').to_i" # おまけ
1482406056
$ ruby -e "require 'time'; puts Time.parse('2016-12-22 20:27:36 JST').to_i" # おまけ
1482406056
$ ruby -e "require 'time'; puts Time.parse('2016-12-22 05:27:36 CST').getlocal" # おまけ
2016-12-22 20:27:36 +0900
わざわざフィルタを入れなくてもembulk-output-tdプラグインの以下のオプションで行けそうに思うが、値は1482406056
になるものの、型がstring型になってしまい、断念
default_timestamp_type_convert_to: sec
環境
$ embulk gem list|grep -i embulk
2016-12-26 15:44:33.104 +0900: Embulk v0.8.15
embulk-filter-timestamp_format (0.2.4)
embulk-input-td (0.1.0)
embulk-output-td (0.3.12)
stringになっちゃう件は、先にtd table:create
・td schema:set
をやっておけばいいのかも
プラグイン入れるのとどっちが楽かなぁ