おはこんばんにちは、Snowflake担当のdanboll_lifeです。
今回は、Alteryx DesignerのDate Time型のデータをSnowflakeに格納する際の注意点について解説していきたいと思います。
SnowflakeにおけるDate Time型
SnowflakeではAlteryx DesignerのようにDate Time型というものはありません。
公式のドキュメント を確認すると下図のように「TIMESTAMP_NTZ」というのが、Alteryx DesignerでいうところのDate Time型に相当することが確認することができます。
DATETIME
DATETIMEは、TIMESTAMP_NTZのエイリアスです。
SnowflakeにおけるTIMESTAMP
SnowflakeにおけるTIMESTAMP型は3種類 あります。その違いについて軽く触れていきます。
TIMESTAMP_LTZ
TIMESTAMP_LTZ は、 UTC 時間を指定された精度で内部に保存します。ただし、すべての操作は、 TIMEZONE セッションパラメーターによって制御される現在のセッションのタイムゾーンで実行されます。
TIMESTAMP_NTZ
TIMESTAMP_NTZ は、「wallclock」時間を指定された精度で内部に保存します。すべての操作は、タイムゾーンを考慮せずに実行されます。
TIMESTAMP_TZ
TIMESTAMP_TZ は、 UTC 時間と関連する タイムゾーンオフセット を内部に保存します。タイムゾーンが指定されていない場合、セッションタイムゾーンオフセットが使用されます。すべての操作は、各レコードに固有のタイムゾーンオフセットで実行されます。
各項目で言われている「指定された精度」とは各項目の末尾に()で0~9の数字を指定することができます。0は秒単位まで格納することができ、9ではナノ秒まで格納することができます。
今回の検証では、デフォルトのエイリアスであるTIMESTAMP_NTZを用いて行きたいと思います。精度に関しては、時差の精度が時間単位のため、0を用いて最小のデータ構成で行います。
また、TIMESTAMP_NTZは公式ドキュメントでタイムゾーンを考慮しないとあるため、加工したデータをそのまま格納できるため、こちらの型を用いて検証していきます。
Snowflakeにテストテーブルの作成
以下のコマンドを用いてSnowflake上にテスト用のテーブルを構築していきます。
(各自の環境にあったROLEやWAREHOUSE、DATABASEを選択してください)
USE ROLE SYSADMIN;
USE WAREHOUSE DESIGNER;
USE DATABASE TEST;
USE SCHEMA PUBLIC;
CREATE or REPLACE TABLE TEST_TIMEZONE (
"TIMESTAMP" TIMESTAMP_NTZ(0),
"DATA" NUMBER(1,0)
);
Alteryx Designerでデータの準備
今回は簡易的にテキスト入力ツールを用いてDate Time型のデータを作成していきたいと思います。
Alteryx DesignerからSnowflakeに書き込む際のドライバーについてはこちらの記事を参考にしていただければと思います。
また、Snowflakeとの接続に関する設定によって状況は異なりますが、エラーになりやすい点として、出力ツールのSQLステートメント事前作成に改めて使用するロールやSCHEMAを指定します。
設定が完了したら、実行ボタンを押下し書き込んでいきたいと思います。
結果確認
Snowflakeに格納されたデータとAlteryx Designerにて書き込んだデータの結果を見てみましょう。
Alteryx DesignerでSnowflakeに格納したDate Time型のデータは元のデータと比較して、16時間と17時間(冬時間分)の時差が確認されました。
ここで改めて、SnowflakeにおけるTIMEZONE型に関するパラメータ値を調べてみたいと思います。
SnowflakeのTIMESTAMP型は、デフォルトのタイムゾーンとしてロサンゼルスのタイムゾーンが設定されていました。(TIMESTAMP_NTZはタイムゾーンを考慮しないという表記がありましたが、書き込む際には考慮されるようです)
日本時間でデータを書き込みたいので、これでは困ってしまいます。
解決策
解決策として2つあります。
ALTERコマンド
Snowflake上のALTERコマンドを用いて、ACCOUNTのTIMEZONE設定をAsia/Tokyoに変更してしまうことです。
コマンドとしては下記になります。
ALTER ACCOUNT SET TIMEZONE = "Asia/Tokyo";
このコマンドを走らせてしまうと、ACCOUNT設定としてTIMEZONEが変更されてしまうため、時差を考慮して組まれていた以前のシステムに影響を与えてしまう場合があるため、自身の環境を調べてからご使用いただければと存じます
Alteryx DesignerでのPre SQL
今回はAlteryx DesignerのSQLステートメント事前作成にTIMEZONEをAsia/Tokyoに変更するコマンドを用いて、データを書き込んでいきたいと思います。
データ出力ツールの設定としては下図のようになります。
ALTER SESSION SET TIMEZONE = 'Asia/Tokyo';
SESSIONとは今回の動作においてのみという命令コマンドと思っていただれば幸いです。
結果2
改めて結果を見てみたいと思います。
きちんと意図した時刻のTIMEZONEにてデータが書き込まれていることが確認できました。
おわりに
Alteryx DesignerのDate Time型のデータをSnowflakeに書き込む際の注意点について書いてきました。
Alteryx DesignerのDate Time型のデータをSnowflakeに書き込む際、Snowflake内部のデフォルトTIMEZONEであるロサンゼルスとの時差が考慮されたデータが書き込まれてしまいます。そのため、Alteryx Designerのデータ出力ツールにて設定可能なSQL ステートメント事前作成にTIMEZONE設定のコマンドを記述することによって、時差を考慮せずにデータを書き込むことができます。
ぜひ、参考にしていただけれと思います。