Redshift JDBC Driver 2.0 系にバージョンアップする際に気をつけること

Redshift JDBC Driver 2.0 系にバージョンアップする際に気をつけること

Clock Icon2021.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Redshift JDBC Driver 2.0系にバージョンアップする際に、注意しないといけない(少しハマった)ことがあったのでまとめておきます。

概要

現段階で私がRedshift JDBC Driver 2.0系を使用してみて、注意が必要だと思うポイントは下記です。

  • jdbc url に jdbc:postgresql://endpoint:port/database が利用できない
  • デフォルトのタイムゾーン設定値はクライアントのタイムゾーンの設定値が使われる

Redshift JDBC Driverのバージョン1.0系と2.0系での設定や挙動と少し異なるようです。

確認環境

確認した環境は、下記になります。

Mac バージョン

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H524

Dbeaver バージョン: 21.0.3.202104181339

Redshift クラスターバージョン : 1.0.25813

Redshift JDBC driver バージョン : 2.0.0.4 / 1.2.43.1067

注意すべきポイント

jdbc url に jdbc:postgresql://endpoint:port/database が利用できない

Redshift JDBC Driver 1.0系では、下記のどちらかをjdbc urlに設定することができました。

  • jdbc:redshift://endpoint:port/database
  • jdbc:postgresql://endpoint:port/database

JDBC ドライバーバージョン 1.0 接続の設定を確認すると、下記の注記がありました。

JDBC ドライバーバージョン 2.0 接続の設定では特にjdbc urlについての記述がなかったので、2.0系では jdbc:postgresql://endpoint:port/database をjdbc urlに設定できなくなったと推察しています。

2.0系で jdbc:postgresql://endpoint:port/database を設定して接続を試してみましたが、接続できませんでした。

基本的にjdbc:redshift://endpoint:port/databaseで設定されていることが多いと思いますが、既存の環境で2.0系にバージョンアップする場合は、一度jdbc urlがjdbc:redshift://endpoint:port/databaseで設定されているかを確認した方が良さそうです。

デフォルトのタイムゾーン設定値はクライアントのタイムゾーンの設定値が使われる

Redshift JDBC Driver 1.0系では、デフォルトのタイムゾーン設定値はUTC固定でした。

クライアント側のタイムゾーンがAsia/Tokyoとなっていることを確認した上で、

$ sudo systemsetup -gettimezone
Time Zone: Asia/Tokyo

Redshift JDBC driver 1.2.43.1067で接続し確認してみると、UTC時刻で値が返されました。(2021/04/30 22:13:56 JST 頃にクエリ実行)

select sysdate as sysdate, getdate() as getdate ;

sysdate            |getdate            |
-------------------+-------------------+
2021-04-30 13:13:56|2021-04-30 13:13:56|

クライアント側のタイムゾーン設定値を変更せずにRedshift JDBC driver 2.0.0.4で接続し確認してみると、Asia/Tokyo時刻で値が返されました。(2021/04/30 22:22:14 JST 頃にクエリ実行)

select sysdate as sysdate, getdate() as getdate ;

sysdate            |getdate            |
-------------------+-------------------+
2021-04-30 22:22:14|2021-04-30 22:22:14|

SETコマンドでセッション毎・ユーザー毎のタイムゾーンを設定できるので、必要に応じて下記のブログのようにタイムゾーンを設定しないといけない場面があるかもしれません。

おわりに

今後他にも注意すべきポイントがあると思うので、わかり次第本記事に追記もしくは別記事にまとめていきたいと思います。

以上、DA(データアナリティクス)事業本部のナガマサでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.