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')
以上
Author And Source
この問題について(Talendを使ってSnowflakeにデータ更新する際の注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/mrsr6113/items/a8c359b496c6b80f82fd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .