watsonx.data SaaS版のPresto エンジンにSimba ODBC Driverからアクセス

\* IBM Cloud上のSaaS版についての記載です

[watsonx.data](https://www.ibm.com/jp-ja/products/watsonx-data)は「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。

当記事はwatsonx.data SaaS版のPrestoエンジンにinsightsoftwareの[Simba Presto ODBC drivers](https://insightsoftware.com/drivers/presto-odbc-jdbc/)からからアクセスするための方法について説明します。

今回試した実行環境は以下です:

- Simba Presto ODBC drivers 1.2.18
- watsonx.data SaaS(Presto 0.286)
- Windows 11

# 1. 事前準備
[watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得](https://qiita.com/items/2687572b6ecce1e54bb5/)を参考に
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報
- ホスト名
- ポート番号
- IBM API key

を取得しておいてください。

尚、[ドキュメント](https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-con-presto-serv#get-api-iam-token)によるとIBM IAM tokenを使う方がワークロード的におすすめとのことですが、GUIでセットするという操作上IBM IAM tokenの入力は向かないと判断しましたので、ここでは記載しません。

また、今回接続するカタログとスキーマも準備をしておきます。
今回はiceberg_dataカタログのspsstestスキーマに接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/670eb804-b6cc-f2d5-f4e2-32b50595e157.png)


# 2. ODBCドライバーのダウンロード
以下からODBCドライバーをダウンロードします。ここではTrial版を導入します。

Presto ODBC Driver - Presto JDBC Driver - Simba 

https://insightsoftware.com/drivers/presto-odbc-jdbc/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c80708b0-5cae-4998-e9c0-c63bd44c28b8.png)

メアドなどを登録すると以下のように期間限定のライセンスファイルが送られてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/892baee0-4aa8-605d-fb36-d4aa96e59c40.png)


# 3. ODBCドライバーの導入
Simba Presto 1.2 64-bit.msiを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1fbceebc-570d-f239-31a5-8b4de02cea79.png)


「Next」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7adeadda-13e3-9064-a0c3-8ec65c2d2827.png)


ライセンス条項に同意して「Next」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/155e377e-a9d3-170b-6a2c-279f527e801e.png)

導入場所を確認し、「Next」で進みます。
ここではデフォルトの`C:\Program Files\Simba Presto ODBC Driver\`で進みます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b7d51b61-b94d-d524-a395-478838070c3f.png)



「Install」で進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/71a52d1e-2a6d-bf78-d856-6837afc0c003.png)


「Finish」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d05fe72a-b735-a591-b08e-13d4d8873f7b.png)


メールで送られてきたライセンスファイルを`C:\Program Files\Simba Presto ODBC Driver\lib`に置きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/56129def-5947-b749-603b-a0ff6a0d5269.png)



# 4. ODBCの設定
ODBCデータソースアドミニストレーター(64bit)を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/45f02e70-1a0a-914b-b583-f35778f2bb1f.png)

「ドライバー」タブで導入されたODBCドライバーを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9b432bff-ed38-298d-e189-5f330b8caec2.png)


ユーザーDSNかシステムDSNで「追加」をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1e5ba343-7ce6-499e-8911-f660d87ab5c0.png)


「Simba Presto ODBC Driver」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1d0006fd-61cd-1056-a781-ffe9911ed02f.png)

以下の設定を行います。
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 ←何を選ぶべきかは後述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/60d544d9-a3d1-34e6-f130-775072e9d621.png)

「Test」をクリックします。
以下のように「SUCCESS！」が戻ればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/dedf077d-6b33-b26c-4d03-355b2952398b.png)

各設定項目については[マニュアル](https://documentation.insightsoftware.com/presto-windows-install-guide/content/odbc/pr/windows/dsn.htm)を参照してください。

## Time Zone IDの設定
悩むのは`Time Zone ID`の設定です。

空欄にするか、`Japan`を指定するとODBCドライバーで扱う時間はJSTになり、SELECTした場合、DBに格納されているデータに＋９時間加算させた値が返ります。INSERTした場合DBに保存されるのは、－9時間されたUTCになります。

例えば、`2022-01-31 23:59:59`というデータが入っている時に、`Time Zone ID`を`UTC`に指定した場合、格納された値がそのまま戻ります。
![{FDF1730B-FE37-433C-A4D2-B667A7074175}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ecff5e3b-6fb9-de3a-9789-0b57aafea21d.png)
しかし、`Time Zone ID`を空欄にするか`Japan`を指定した場合、＋９時間された値が戻ります。
![{610E020D-BB45-4671-A3E1-3A4E78A80337}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/66498fb5-acba-916d-fe96-97302918db49.png)

watsonx.dataのWebコンソールでは格納された値がそのまま参照されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/63fe0bd6-586e-973a-7a96-158330b11efd.png)

[presto-python-client](https://github.com/prestodb/presto-python-client/)ではTimeZoneの指定がなく、格納された値がそのまま戻ってきていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6cc68ccf-8747-b5c4-0353-370ceb33561a.png)
ただし、[meta社のJDBCドライバー](https://prestodb.io/docs/current/installation/jdbc.html)＋DBeaverでは、デフォルト設定では＋９時間された値が戻りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/82ebf24c-bbcc-5e9c-6654-2b50a829affc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fe45cb5f-ab91-8954-d7b4-42b5112d5374.png)

接続方法によって結果が異なり、どれを選ぶかの判断が難しいところです。ただ、DBに保存する時間データをUTCで統一するのであれば`Japan`指定するのでもよいかもしれませんが、多くのケースの時間データはローカル時間で保存するのではないかと思います。

個人的には、ODBCドライバーは`UTC`で設定しておいた方が、無難かと思いました。

ただし、`UTC`を設定した場合は、current_timestampやlocaltimestampはUTCで戻ることになりますので、[DATE_ADD](https://prestodb.io/docs/current/functions/datetime.html#date_add-unit-value-timestamp-same-as-input)を使って、
```sql
DATE_ADD('hour', 9, localtimestamp)`
```
のように＋９時間で補正をして利用する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/583ae40a-f9a8-bf44-dd46-ab82bdec9cdc.png)

## ロギング
問題判別をする場合はLogging Optionを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/159ebf29-e972-8bdb-4d9c-513bedf4bddf.png)

以下のようにログが出力されます。

![{D76ADE0D-F32E-413F-9EE0-0151FF1412E0}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9946f081-471b-49d1-22bf-09290046a15a.png)



# 3. 関連リンク
- [watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得](https://qiita.com/nishikyon/items/2687572b6ecce1e54bb5)
- [watsonx.data SaaS版のPresto エンジンに Presto CLI からアクセス](https://qiita.com/nishikyon/items/2f3ecaa13fe0e7cb4e5c)
- [watsonx.data SaaS版のPresto エンジンにpythonからアクセス](https://qiita.com/nishikyon/items/b5afeb5263a37957c00d)
- [watsonx.data SaaS版のPresto エンジンにDBeaverからアクセス](https://qiita.com/nishikyon/items/3aa33e5501570bc12827)

insightsoftware Presto Online Documentation

https://documentation.insightsoftware.com/simba-home-olh/content/homepage/presto.htm