0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-21

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

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

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

  2020-07-21_16h21_41.png

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

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

2020-07-21_13h52_53.png

現状では他に選択肢がない為、バッチの時間を変更して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')

​以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?