* IBM Cloud上のSaaS版についての記載です
watsonx.dataは「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。
当記事はwatsonx.data SaaS版のPrestoエンジンにinsightsoftwareのSimba Presto ODBC driversからからアクセスするための方法について説明します。
今回試した実行環境は以下です:
- Simba Presto ODBC drivers 1.2.18
- watsonx.data SaaS(Presto 0.286)
- Windows 11
1. 事前準備
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得を参考に
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報
- ホスト名
- ポート番号
- IBM API key
を取得しておいてください。
尚、ドキュメントによるとIBM IAM tokenを使う方がワークロード的におすすめとのことですが、GUIでセットするという操作上IBM IAM tokenの入力は向かないと判断しましたので、ここでは記載しません。
また、今回接続するカタログとスキーマも準備をしておきます。
今回はiceberg_dataカタログのspsstestスキーマに接続します。
2. ODBCドライバーのダウンロード
以下からODBCドライバーをダウンロードします。ここではTrial版を導入します。
Presto ODBC Driver - Presto JDBC Driver - Simba
メアドなどを登録すると以下のように期間限定のライセンスファイルが送られてきます。
3. ODBCドライバーの導入
Simba Presto 1.2 64-bit.msiを起動します。
導入場所を確認し、「Next」で進みます。
ここではデフォルトのC:\Program Files\Simba Presto ODBC Driver\
で進みます。
「Install」で進みます。
メールで送られてきたライセンスファイルをC:\Program Files\Simba Presto ODBC Driver\lib
に置きます。
4. ODBCの設定
ODBCデータソースアドミニストレーター(64bit)を起動します。
「ドライバー」タブで導入されたODBCドライバーを確認します。
「Simba Presto ODBC Driver」を選びます。
以下の設定を行います。
Data source name: 任意の名前入力します。ここではwx.dataSaaSとしました。
Authorization Type: LDAP Authentication
User: ibmlhapikey
Password: #1 事前準備で得たAPIキー
Host: #1 事前準備で得たホスト名
Port: #1 事前準備で得たポート番号
Catalog: #1 事前準備のデータマネージャーで得たカタログ名
Schema: #1 事前準備のデータマネージャーで得たスキーマ名
Time Zone ID: UTC ←何を選ぶべきかは後述します。
「Test」をクリックします。
以下のように「SUCCESS!」が戻ればOKです。
各設定項目についてはマニュアルを参照してください。
Time Zone IDの設定
悩むのはTime Zone ID
の設定です。
空欄にするか、Japan
を指定するとODBCドライバーで扱う時間はJSTになり、SELECTした場合、DBに格納されているデータに+9時間加算させた値が返ります。INSERTした場合DBに保存されるのは、-9時間されたUTCになります。
例えば、2022-01-31 23:59:59
というデータが入っている時に、Time Zone ID
をUTC
に指定した場合、格納された値がそのまま戻ります。
しかし、Time Zone ID
を空欄にするかJapan
を指定した場合、+9時間された値が戻ります。
watsonx.dataのWebコンソールでは格納された値がそのまま参照されました。
presto-python-clientではTimeZoneの指定がなく、格納された値がそのまま戻ってきていました。
ただし、meta社のJDBCドライバー+DBeaverでは、デフォルト設定では+9時間された値が戻りました。
接続方法によって結果が異なり、どれを選ぶかの判断が難しいところです。ただ、DBに保存する時間データをUTCで統一するのであればJapan
指定するのでもよいかもしれませんが、多くのケースの時間データはローカル時間で保存するのではないかと思います。
個人的には、ODBCドライバーはUTC
で設定しておいた方が、無難かと思いました。
ただし、UTC
を設定した場合は、current_timestampやlocaltimestampはUTCで戻ることになりますので、DATE_ADDを使って、
DATE_ADD('hour', 9, localtimestamp)`
のように+9時間で補正をして利用する必要があります。
ロギング
問題判別をする場合はLogging Optionを指定します。
以下のようにログが出力されます。
3. 関連リンク
- watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得
- watsonx.data SaaS版のPresto エンジンに Presto CLI からアクセス
- watsonx.data SaaS版のPresto エンジンにpythonからアクセス
- watsonx.data SaaS版のPresto エンジンにDBeaverからアクセス
insightsoftware Presto Online Documentation