Talendを使ってSnowflakeにデータ更新する際の注意点


Snowflakeの現在日時取得関数CURRENT_DATE()に戸惑う

Snowflakeで当日のデータを洗い替える為に、CURRENT_DATE()を使って当日データをDeleteしていたのですが、うまくいく場合とうまくいかない場合がありました。show parametersで現在のTimezoneを確認してみたところ、Timezoneの初期値がAmerica/Los_Angelesとなっていました。ここをAsia/Tokyoに変更することで正しく当日の日付が取得できることを確認しました。

show parameters
Alter session set TIMEZONE  = 'Asia/Tokyo'

  

それでもTalendの日付がズレる

Snowflake側のCURRENT_DATE()の時間ズレは解消できましたが、Talendから処理を実行するとまだ日付がズレたままでした。私が使用しているTalendのバージョン(7.3.1)では、Snowflakeのコンポーネントをで東京リージョンが選択できない(2020年7月現在)為、米国西部を使用しています。これが原因となりCURRENT_DATE()が米国西部時間になっていたと考えています。

現状では他に選択肢がない為、バッチの時間を変更して16時までにデータ洗い替えを終わらせるようにすることにしました。(16時までならCURRENT_DATE()+1で当日データとなる為)
もし、こちらの対応方法以外に良い方法があれば、ご意見を頂けると助かります。

おまけ

現在日付取得関数の違い

基幹システムDBにOracleを使っており、それ以外のマスタデータはSQLserverでデータを管理しています。今回DWHとしてSnowflakeを導入しました。
(Snowflake選定までの記事は別途記載します)

Oracle、SQLserver、Snowflakeで現在日付を取得する関数が違います。
  ・Oracle    SYSDATE
  ・SQLserver  GETDATE()
  ・Snowflake  CURRENT_DATE()
8桁の日付文字列として扱う場合は下記のように扱います。
  ・Oracle    TO_CHAR(SYSDATE,'YYYYMMDD')
  ・SQLserver  SUBSTRING(CONVERT(VARCHAR, GETDATE(), 112),1,8)
  ・Snowflake  TO_CHAR(CURRENT_DATE(),'YYYYMMDD')

​以上