embulk-input-mysql의 시간 편차 요약

조사의 계기



Embulk에서 MySQL에서 Datetime이나 Timestamp를 취득하면 DB가 일본 시간(+900)인데 Embulk에서는 UTC(+000)가 된다.
이 UTC 변환은, 어느 장소의 타임 존을 사용해 변환하고 있는지 모르기 때문에 조사해 보았다.

MySQL 조사 데이터



JST의 경우
mysql> desc dt;
+-------+-----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| d     | datetime  | YES  |     | NULL    |       |
| t     | timestamp | YES  |     | NULL    |       |
+-------+-----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | JST    |
| time_zone        | SYSTEM | <-- SYSTEMはsystem_time_zoneの設定に倣うという意味
+------------------+--------+

mysql> select * from dt;
+---------------------+---------------------+
| d                   | t                   |
+---------------------+---------------------+
| 2019-03-25 13:14:00 | 2019-03-25 13:14:00 |
+---------------------+---------------------+

UTC의 경우
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM | <-- SYSTEMはsystem_time_zoneの設定に倣うという意味
+------------------+--------+

mysql> select * from dt;
+---------------------+---------------------+
| d                   | t                   |
+---------------------+---------------------+
| 2019-03-25 13:14:00 | 2019-03-25 04:14:00 |
+---------------------+---------------------+

Embulk 버전 및 yml


root@9d86773c89eb:/home/embulk# embulk --help
Embulk v0.9.16
in:
  type: mysql
  host: mysql_host
  user: root
  password: pass
  database: embulk
# 今はTZが未設定。下記をそれぞれ有効化して変化を調べる
#  options: {useLegacyDatetimeCode: false, serverTimezone: Etc/UTC}
#  options: {useLegacyDatetimeCode: false, serverTimezone: Asia/Tokyo}
  query: "select d, t from dt"


목록




DB 서버
Embulk 서버
Embulk 설정
DB:datetime
DB:timestamp
Embulk:datetime
Embulk:timestamp
시간차
메모


UTC
UTC
지정되지 않음
2019/3/25 13:14
2019/3/25 4:14
2019-03-25 13:14:00 UTC
2019-03-25 04:14:00 UTC
시간 그대로
 

UTC
UTC
Asia/Tokyo
2019/3/25 13:14
2019/3/25 4:14
2019-03-25 04:14:00 UTC
2019-03-24 19:14:00 UTC
-9시간
Embulk 설정이 좋다.

UTC
Asia/Tokyo
지정되지 않음
2019/3/25 13:14
2019/3/25 4:14
2019-03-25 13:14:00 UTC
2019-03-25 04:14:00 UTC
시간 그대로
Embulk 서버의 시간대는 무시합니다.

UTC
Asia/Tokyo
Asia/Tokyo
2019/3/25 13:14
2019/3/25 4:14
2019-03-25 04:14:00 UTC
2019-03-24 19:14:00 UTC
-9시간
 

JST
UTC
지정되지 않음
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 04:14:00 UTC
2019-03-25 04:14:00 UTC
-9시간
DB의 시간대가 좋다.

JST
UTC
Asia/Tokyo
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 04:14:00 UTC
2019-03-25 04:14:00 UTC
-9시간
 

JST
Asia/Tokyo
지정되지 않음
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 04:14:00 UTC
2019-03-25 04:14:00 UTC
-9시간
 

JST
Asia/Tokyo
Asia/Tokyo
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 04:14:00 UTC
2019-03-25 04:14:00 UTC
-9시간
 

JST
UTC
UTC
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 13:14:00 UTC
2019-03-25 13:14:00 UTC
시간 그대로
Embulk 설정에서 DB 시간대를 덮어쓰기

JST
Asia/Tokyo
UTC
2019/3/25 13:14
2019/3/25 13:14
2019-03-25 13:14:00 UTC
2019-03-25 13:14:00 UTC
시간 그대로
 


※추기 위의 표는 개행이 들어가 보이지 않기 때문에 화상화


요약



MySQL이 채용하고 있는 타임 존을 사용해 UTC화하고 있다.
그러나 Embulk측의 serverTimezone 로 타임 존의 덧쓰기를 할 수 있다.

좋은 웹페이지 즐겨찾기