CData Snowflake Drivers で時刻データを取り扱う際の注意点
本記事はCDataが提供する「CData Software Blog」に掲載された「CData Snowflake Drivers で時刻データを取り扱う際の注意点」を再編集したものです。
本記事ではCData Snowflake Drivers で、時刻データを取り扱う際の注意点についてご説明します。
Snowflakeで時刻データを取り扱う際には、以下の2点について注意が必要です。以下の設定によっては、意図していないデータ(時刻がズレたデータ)が登録されてしまう可能性がありますので、本記事ではその原因と対策について解説します。
➀カラムのTIMESTAMPの種類
②パラメータのCLIENT_TIMESTAMP_TYPE_MAPPINGの設定値
SnowflakeのTIMESTAMPについて
SnowflakeのTIMESTAMPについては、こちらのドキュメントに記載があります。ポイントとしてはTIMESTAMPが3種類あるということです。対象のカラムがどのTIMESTAMPを利用しているか確認してください。
・TIMESTAMP_LTZ
・TIMESTAMP_NTZ
・TIMESTAMP_TZ
Snowflakeのセッションパラメータについて
Snowflakeには動作を制御できるパラメーターが用意されています。TIMESTAMPに関連するパラメータとして、CLIENT_TIMESTAMP_TYPE_MAPPINGがあります。これはどのTIMESTAMPの種類を利用するかを指定するパラメータで、デフォルト値はTIMESTAMP_LTZが設定されています。詳細はこちらの公式ドキュメントを参照ください。
注意点
基本的な考え方としては前述の二つを合わせる必要があります。つまり対象カラムのTIMESTAMPの種類とCLIENT_TIMESTAMP_TYPE_MAPPINGの設定値を合わせる必要があります
CData Snowflake DriversでCLIENT_TIMESTAMP_TYPE_MAPPINGを設定する方法
接続プロパティのSessionParametersで指定することが可能です。例えばCData JDBC Driver for Snowflakeであれば、こちらのヘルプの記載があります。
そして以下のように設定することが出来ます。
例:
jdbc:snowflake:Warehouse=xxxxx;User=xxxxx;Password=xxxxx;URL=xxxxx;Database=xxxxx;Schema=xxxxx;SessionParameters='CLIENT_TIMESTAMP_TYPE_MAPPING=TIMESTAMP_NTZ';
対象カラムのTIMESTAMPの種類と
CLIENT_TIMESTAMP_TYPE_MAPPINGの設定値が異なる場合
それでは対象カラムのTIMESTAMPの種類と
CLIENT_TIMESTAMP_TYPE_MAPPINGの設定値が異なるとどうなるか見てみましょう。下記の条件で状態で時刻データを登録すると、意図していないデータ(時刻がズレたデータ)が登録されてしまいます。
・TIMESTAMP:TIMESTAMP_NTZ
・CLIENT_TIMESTAMP_TYPE_MAPPING:TIMESTAMP_LTZ
・インプットデータ:2023-05-31 10:00:00
実際にデータを投入してSnowflakeで確認すると、TIMESTAMP_NTZに登録した時刻データが本来の2023-05-31 10:00:00から、2023-05-30 20:00:00に変更されてしまっていることが分かります。
対象カラムのTIMESTAMPの種類と
CLIENT_TIMESTAMP_TYPE_MAPPINGの設定値を合わせた場合
それでは次に対象カラムのTIMESTAMPの種類と
CLIENT_TIMESTAMP_TYPE_MAPPINGの設定値を合わせた場合はどうなるか見てみましょう。次は下記の条件で時刻データを登録してみます。
・TIMESTAMP:TIMESTAMP_NTZ
・CLIENT_TIMESTAMP_TYPE_MAPPING:TIMESTAMP_NTZ
・インプットデータ:2023-05-31 10:00:00
今度はきちんと本来の2023-05-31 10:00:00で登録されていることが分かります。
おわりに
今回はCData Snowflake Drivers で時刻データを取り扱う際の注意点を説明しました。時刻データを連携した際に値がズレてしまわないように、今回ご案内した内容を元に事前にご確認いただければと思います。CData Snowflake Drivers は30日間無料でお使いいただけます。Snowflake との連携をご検討の方はぜひお試しください。