Time Zone
time_zone設定がクエリ結果、ロード、およびSHOWコマンド、システムテーブル、ツールで表示される時刻にどのように影響するか。
タイムゾーンはいくつかの場所に現れますが、すべてが同じルールに従うわけではありません。壁時計とインスタントという1つの区別が、残りを説明します。
壁時計とインスタント
VeloDBは2種類の時刻値を扱います:
- 壁時計:
2026-06-26 10:00:00のようなカレンダー表示で、ゾーンが付いていません。DATEとDATETIMEカラムがこれを格納します。書かれた通りに正確に表示され、time_zoneによって変更されることはありません。 - インスタント: 時刻の絶対的な点で、
1970-01-01 00:00:00 UTCからの秒数として格納されます。ゾーンを選ぶまで時や分はありません。now()、ロードタイムスタンプ、ジョブ時刻はインスタントです。
ゾーンは2つの間で変換する時にのみ重要です。同じインスタントは各ゾーンで異なる壁時計になります:
SET time_zone = '+00:00'; SELECT from_unixtime(1000000000); -- 2001-09-09 01:46:40
SET time_zone = 'Asia/Tokyo'; SELECT from_unixtime(1000000000); -- 2001-09-09 10:46:40
保存されたインスタントは同じです。表示される時計のみが変更されます。
タイムゾーン変数
| 変数 | 書き込み可能 | 機能 |
|---|---|---|
time_zone | Yes | アクティブなゾーン。インスタントと壁時計時刻を相互変換します。 |
system_time_zone | No (読み取り専用) | 起動時に検出されたサーバー自身のゾーンを報告します。情報提供用。 |
SELECT @@time_zone; -- the active zone
SET time_zone = 'America/New_York'; -- this session only
SET GLOBAL time_zone = '+00:00'; -- default for future sessions
time_zoneはsystem_time_zoneから開始されますが、変更することができます。変更してもストレージされたデータには触れません。インスタントがどのように変換されるかのみを変更します。
ストレージされたテーブルデータ
DATEとDATETIMEカラムは壁時計時刻です。2026-06-26 10:00:00を書き込むと、任意のセッション、任意のtime_zoneの下で2026-06-26 10:00:00として読み戻されます。time_zoneを変更してもストレージされた値の書き換えや再解釈は行われません。
時刻関数
これらの関数はインスタントと壁時計時刻の間で変換を行うため、セッションのtime_zoneを使用します:
| 関数 | 効果 |
|---|---|
now(), current_timestamp(), curdate() | 現在のインスタントを自分のゾーンの壁時計時刻として返す |
unix_timestamp(datetime) | datetimeを自分のゾーンの壁時計時刻として読み取り、インスタントを返す |
from_unixtime(instant) | インスタントを自分のゾーンの壁時計時刻に変換する |
convert_tz(dt, from, to) | 指定した2つのゾーン間で変換する;time_zoneは無視される |
now()はクエリごとに一度固定されるため、分散クエリでもどこでも同じ値を返します。
ロード
ほとんどのロードメソッドは独自のtimezoneを受け入れるため、ロードは固定ゾーンの下で受信したdatetimeをパースできます。省略すると、ロードはセッションのtime_zoneを使用します。
| ロードメソッド | 設定方法 |
|---|---|
| Stream Load | timezone HTTPヘッダー。Stream Loadを参照。 |
| Broker Load / S3 Load | PROPERTIES内のtimezone。Broker Loadを参照。 |
| Routine Load | ジョブPROPERTIES内のtimezone。Routine Loadを参照。 |
| MySQL Load | timezoneプロパティ。MySQL Loadを参照。 |
curl --location-trusted -u <user>:<password> \
-H "timezone: America/New_York" \
-T data.csv \
http://<host>:<port>/api/<db>/<table>/_stream_load
INSERT、SELECT INTO OUTFILE、および EXPORT にはロード毎のオプションはありません。まずセッションで time_zone を設定してください。
SHOW コマンドとシステムテーブルでの時刻
ジョブとロードのメタデータ(作成時刻、一時停止時刻など)はインスタントです。これらは表示するまではゾーンを持たず、ゾーンはどのように読み取るかに依存します:
SHOWコマンドはセッションのtime_zoneを使用します。- システムテーブルとテーブル関数はグローバルの
time_zone(SET GLOBAL time_zone)を使用し、セッション値は使用しません。
そのため、同じジョブの作成時刻が2つの方法で異なって見える可能性があります:
SET time_zone = 'Asia/Tokyo';
SHOW ROUTINE LOAD; -- create time in your session zone
SELECT * FROM information_schema.routine_load_jobs; -- create time in the global zone
SELECT * FROM jobs("type"="insert"); -- create time in the global zone
基盤となるインスタントは同じです。表示される時計のみが異なります。
Query audit
audit_logテーブルは他のシステムテーブルと同じルールに従います。クエリ時刻はグローバルなtime_zoneを使用し、セッション値は使用しません。各行の時刻は一度テキストとして書き込まれるため、既存の行は後でグローバル設定を変更しても、書き込まれた際のゾーンを保持します。
Time(ms)、CpuTimeMS、および類似のカラムは時計時刻ではなく、ミリ秒単位の期間です。
VeloDB Console
Consoleは全ての時刻を閲覧者のブラウザゾーンで表示し、時間範囲ピッカーは同じゾーンで選択を読み取ります。2つの結果があります:
- 同じイベントが異なる地域の閲覧者に異なる時計を表示します。それでも1つの瞬間です。
- Console時刻は同じ値のSQLクエリと異なる場合があります。これはConsoleがブラウザゾーンを使用し、SQLが
time_zoneを使用するためです。
Consoleの表示を変更するには、time_zoneではなく、ブラウザまたはOSゾーンを変更してください。
受け入れられるゾーン形式
- 名前付きゾーン:
America/New_York、Europe/London、Asia/Tokyo - 固定オフセット:
+09:00、-05:30、+00:00 - エイリアス:
UTCとGMTはUTCを意味します。CSTは米国中部時間ではなくAsia/Shanghai(+08:00)に解決されます。米国中部時間にはAmerica/Chicagoを使用してください。
名前付きゾーンは夏時間に従います。例えば、America/Los_Angelesは春に-08:00から-07:00にシフトし、秋に戻るため、同じ壁時計が年間を通じて異なるインスタントにマップされます。一定のオフセットを固定してDSTをオプトアウトするには、名前付きゾーンの代わりに-08:00のような固定オフセットを使用してください。
一覧
| サーフェス | 使用するゾーン |
|---|---|
格納されたDATE/DATETIME | なし(書き込まれた通りに表示) |
now()、unix_timestamp、from_unixtime | セッションtime_zone |
| ロード | ロードのtimezone、なければセッションtime_zone |
SHOWコマンド | セッションtime_zone |
システムテーブルとテーブル関数(routine_load_jobs、jobs()、audit_log) | グローバルtime_zone |
| VeloDB Console | 閲覧者のブラウザゾーン |
関連項目
convert_tzはクエリ内で2つの名前付きゾーン間でdatetimeを変換します。- Stream Load、Broker Load、Routine Load、およびMySQL Loadはロードごとの
timezoneを受け入れます。