Snowflakeで使えるTimestamp型の比較
Snowflake Timestamp型 | PostgreSQL Timestamp型 | 保存時のデータ | 参照時の出力 |
---|---|---|---|
TIMESTAMP_LTZ | TIMESTAMP WITH LOCAL TIME ZONE | UTC | 操作時のタイムゾーンを参照 |
TIMESTAMP_NTZ | TIMESTAMP WITHOUT TIME ZONE | タイムゾーンを無視 | タイムゾーンを無視 |
TIMESTAMP_TZ | TIMESTAMP WITH TIME ZONE | タイムゾーンオフセット付き | 保存されたタイムゾーンを参照 |
SnowflakeのTimestamp型から動作をイメージできないので、エイリアスにもなっているPostgreSQLのTimestamp型を追記。
確認用SQLと出力結果
動作確認をする。
確認用SQL
create or replace table ts(
"挿入データ" string,
"TIMESTAMP_LTZ" timestamp_ltz,
"TIMESTAMP_NTZ" timestamp_ntz,
"TIMESTAMP_TZ" timestamp_tz
);
alter session set timezone = 'America/Adak'; -- ハワイ - アリューシャン標準時 -10
insert into ts values
(
'2014-01-01 00:00:00',
'2014-01-01 00:00:00',
'2014-01-01 00:00:00',
'2014-01-01 00:00:00'
),(
'2014-01-01 00:00:00 +00:00',
'2014-01-01 00:00:00 +00:00',
'2014-01-01 00:00:00 +00:00',
'2014-01-01 00:00:00 +00:00'
),(
'2014-01-01 00:00:00 +09:00',
'2014-01-01 00:00:00 +09:00',
'2014-01-01 00:00:00 +09:00',
'2014-01-01 00:00:00 +09:00'
)
;
alter session set timezone = 'Asia/Kolkata'; -- インド標準時 +5.5
-- alter session set timezone = 'UTC';
select * from ts;
出力結果
挿入データ | TIMESTAMP_LTZ | TIMESTAMP_NTZ | TIMESTAMP_TZ |
---|---|---|---|
2014-01-01 00:00:00 | 2014-01-01 15:30:00.000 +0530 | 2014-01-01 00:00:00.000 | 2014-01-01 00:00:00.000 -1000 |
2014-01-01 00:00:00 +00:00 | 2014-01-01 05:30:00.000 +0530 | 2014-01-01 00:00:00.000 | 2014-01-01 00:00:00.000 +0000 |
2014-01-01 00:00:00 +09:00 | 2013-12-31 20:30:00.000 +0530 | 2014-01-01 00:00:00.000 | 2014-01-01 00:00:00.000 +0900 |
TIMESTAMP_LTZ型を使った時の変換が脳内計算できないので、それぞれの操作時のタイムゾーンと、タイムゾーンがUTCの場合の列を追記。
挿入データ(America/Adak -10) | TIMESTAMP_LTZ (UTC) | TIMESTAMP_LTZ (Asia/Kolkata +5.5) | TIMESTAMP_NTZ (Asia/Kolkata +5.5) | TIMESTAMP_TZ (Asia/Kolkata +5.5) |
---|---|---|---|---|
2014-01-01 0:00:00 | 2014-01-01 10:00:00.000 +0000 | 2014-01-01 15:30:00.000 +0530 | 2014-01-01 0:00:00 | 2014-01-01 00:00:00.000 -1000 |
2014-01-01 00:00:00 +00:00 | 2014-01-01 00:00:00.000 +0000 | 2014-01-01 05:30:00.000 +0530 | 2014-01-01 0:00:00 | 2014-01-01 00:00:00.000 +0000 |
2014-01-01 00:00:00 +09:00 | 2013-12-31 15:00:00.000 +0000 | 2013-12-31 20:30:00.000 +0530 | 2014-01-01 0:00:00 | 2014-01-01 00:00:00.000 +0900 |
オフセット無しでデータを挿入すると、セッションのTIMEZONEが自動的に付与される。
参考