DBeaverからWatsonQueryにアクセスする

当記事はOSSのDB Tool [DBeaver](https://dbeaver.io/)からIBM Cloudのデータ仮想化サービス[Watson Query(SaaS版)](https://cloud.ibm.com/catalog/services/watson-query)に接続する方法について説明します。
外部のBIツールなどからWatson Queryには、Db2のJDBCドライバーが使用できればでアクセスすることができます。その際、useridではなくAPIKEYが必要です。


# 1. APIKEY, 接続情報の準備
### 1-1.  APIKEYは以下の2つの方法、どちらかで準備してください。
- [IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)
    - これはIBM CloudのIDに紐ついたAPIKEYで権限はそのIDと同じになります
- [Watson QueryのAPIKEYを含む資格情報の作成と接続情報の取得](https://qiita.com/nishikyon/items/b8bed0d006ae15088780)
    - こちらはWatson Query用のAPIKEYでManagerかDataAccessかが選べます

### 1-2.  接続情報は以下のどちらかで取得してください。
#### A. データ仮想化の接続情報から取得
##### A-1. ナビゲーションメニューから「データ仮想化」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/089b1561-3f86-0e39-2117-59752e2f6b81.png)

##### A-2. データ仮想化画面のドロップダウンメニューから「接続の詳細」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/7c542dbc-e331-e865-46fe-0b4e24afc8dd.png)

##### A-3. 接続構成リソースから以下を取得します
- ホスト名
- ポート番号
- データベース名
- JDBCストリングの最後のパラメータ2つ
    - `securityMechanism=15`;`sslConnection=true`;
    - (この2つは参考までに・・・)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/02081b24-a53e-5539-9376-d105c6437950.png)


#### B. 作成した「サービス資格情報」から取得
[Watson QueryのAPIKEYを含む資格情報の作成と接続情報の取得](https://qiita.com/nishikyon/items/b8bed0d006ae15088780)で資格情報を作成した場合は、その情報から取得できます。

##### B-1.作成した資格情報の名前(鍵名)の横のvをクリックして表示し、以下の情報を取得します。
参考: [Watson QueryのAPIKEYを含む資格情報の作成と接続情報の取得-6. APIKEYの表示](https://qiita.com/nishikyon/items/b8bed0d006ae15088780#6-apikey%E3%81%AE%E8%A1%A8%E7%A4%BA)

資格情報の`Legacy`の中の以下の情報を取得します:
- database -- データベース名
- hostname -- ホスト名
- port -- ポート番号
- securityMechanism
- username
(`securityMechanism`と`username`は参考までに・・・)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/0730328c-4acf-6148-1ef2-be2e19f240e6.png)


## 2.　DBeaverを開き、接続を作成

### 2-1.上部メニューから「データベース」→「新しい接続」を開く
### 2-2.　DB2 LUWのアイコンをクリックし、「次へ」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/2a5eac5c-6b5d-b8f5-8d00-5e1c7566af26.png)

### 2-3. DB2 LUW接続設定を入力
まずは、「接続の詳細」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/11117627-a2e6-8a06-40a9-aa823351eab8.png)

接続名にわかりやすい名前を入れて(そのままでもOKですが、たくさん作成するとわからなくなるので)、「戻る」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/59cd2071-7f99-ac0f-4c0d-59e0e82bf1b3.png)




次に [1. APIKEY, 接続情報の準備](#1-apikey-接続情報の準備)で取得したAPIKEY, 接続情報を入力します。
#### [一般]タブ
- Host: ホスト名
- Port: ポート番号
- Database: データベース名
- ユーザー名: `IBM_SUBSTTOKEN_APIKEY`
    - サービス資格情報で取得したusernameです！　ちなみにサービス資格情報を作成していなくても決め打ちです。
    -  ここがPoint!
- パスワード: 　[1. APIKEY, 接続情報の準備](#1-apikey-接続情報の準備)で取得したAPIKEY　の値
    - ここもPoint!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b290f1bf-e3c8-d314-b9c1-6ca6af742d6b.png)

#### [ドライバのプロパティ]タブ
左下の＋印をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/33909679-b32f-8014-6651-14e32010d831.png)
プロパティ名に`securityMechanism`と入力、OKをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c037ac48-74c0-4807-f5de-7afdde17ed17.png)

`securityMechanism`をクリックして、`15`を入力
(この値は接続情報にあった値です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/63b98bc9-50b2-e699-ae31-46b48f825504.png)

再度＋印をクリックし、プロパティ名に`sslConnection`と入力、OKをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b32a9166-1623-5a15-6344-6c512adaf973.png)

`sslConnection`をクリックして、`true`を入力
(この値はデータ仮想化画面の接続情報にあった値です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/861ccaba-657a-84a0-1e28-dd751bf67a4a.png)

最後に「テスト接続」をクリックして設定を確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b7adcdf6-8f9a-8bb9-d394-2203f91055a0.png)

接続が確認できました! 「OK」をクリックしてダイアログを閉じます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/374505dd-8213-4019-824f-bb6ee19c75e9.png)

右下の「終了」をクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e3b946f7-1b31-9ffb-89a1-d8af420d0fc2.png)


無事データベースナビゲータに表示されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/66094d01-a503-fd62-37f7-4c09a733c75d.png)

## 3.　DBeaverでデータを表示してみる
スキーマまでは見えるのですが、テーブルやビューは表示できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/22bfac3f-3f7c-e264-d2b5-b7a3bc930bc3.png)

しかし、見たいスキーマの下のTablesをダブルクリック、ER図のタブをクリックすると、仮想化したテーブルが見えました!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/79698056-ea60-8c15-2e43-a8bc6a36dcd5.png)

さらにER図に表示されたテーブルをクリックするとテーブルのプロパティも見えるようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/9f1b9456-95f3-d442-5f51-876494652128.png)

データの中身も「データ」タブで見えました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c689de10-cc3e-2db8-1fd1-fa30d9a8ca54.png)

もちろんSQLも実行可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/670f2cd5-ad51-662e-67d2-c887c88cb7a2.png)

# 4.　まとめ 
WatsonQueryはDb2ドライバーを使って、お好みのToolからもアクセス可能です。
今回はDBeaverから接続してみました。

DBeaverのDB2 LUW接続設定はユーザー名とパスワードが必須ですが、サービス資格情報のLegacyの値をを参考にユーザー名を`IBM_SUBSTTOKEN_APIKEY`、パスワードを`APIKEY`にセットし、ドライバーのプロパティ(接続パラメータ)に`securityMechanism=15`が設定できれば設定可能でした。
`sslConnection=true`はSSL接続という意味なので、SSL接続フラグのようなものがあるToolはそのフラグが代替になると思います。DBeaver　はドライバーのプロパティで指定なので、`sslConnection=true`を設定しています。

接続パラメータが特殊なので、JDBCストリングを指定できるToolであれば、接続情報にあるJDBCストリングをそのまま指定してもよいかもしれません。

以上です。