Watson Queryにclpplusで接続する

# はじめに

この記事では、Watson Queryにclpplusで接続する手順を紹介します。

# 手順概要
1. ドライバーパッケージをダウンロード
1. ドライバーパッケージをインストール
1. 接続情報を設定
1. clpplusで接続

# 環境
- Watson Query Liteプラン （デプロイ済み）
- Client: MacBook Air MacOS

# 手順

## 1. ドライバー・パッケージをダウンロード
IBMCloudのコンソールからWatson Queryの画面を開きます。
左側にあるメニューから「管理」を選択し、「Go to UI」を選択し、Watson Queryの管理コンソールを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/dfcfef6b-74c0-eab1-cad7-69b8b7e67ca7.png)

Watson Queryの管理コンソールの左上にあるリストを開きます。
リストから「接続の詳細」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/63d95a78-bc88-5565-c22a-54f2b5ab42f8.png)

「接続の詳細」の画面で、「Mac」のタブを開き、「ドライバー・リスト」のリンクの先からドライバー・パッケージをダウンロードします。
Mac用のモジュールで、出来るだけ新しいものをダウンロードします。
この手順では、v11.5.7.0をダウンロードしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/4a0a4d44-a6d3-ff87-2075-91e8ef466c0e.png)

## 2. ドライバー・パッケージをインストール
ダウンロードしたibm_data_server_driver_package_macos_v11.5.dmgをダブルクリックして開きます。
以下の画面が表示されるので、installDSDriverをダブルクリックして実行します。
この実行によりドライバー・パッケージが/Application/dsdriverへインストールされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/530bbd6e-d509-b892-413d-f13eb31d6495.png)

## 3. 接続情報を設定

「接続の詳細」の画面で、「接続します」のボタンをクリックして、接続情報を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/9aff756f-48bd-bd1b-ee86-1e3290f24e5c.png)

「SSLを使用する接続の場合」の設定内容をコピーします。右側にあるコピーのアイコンをクリックしてコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/d91f12e4-e289-246b-f76c-2954b8c9a748.png)

適当なテキストエディターに貼り付けます。
以下の例のように3行目のparameterの部分に、``Authentication=GSSPLUGIM``を追加します。＜ー重要！！！

```
db2cli writecfg add -database bludb -host xxxx.databases.appdomain.cloud -port 30207
db2cli writecfg add -dsn dashdb -database bludb -host xxxx.databases.appdomain.cloud -port 30207
db2cli writecfg add -database bludb -host xxxx.databases.appdomain.cloud -port 30207 -parameter "SecurityTransportMode=SSL;Authentication=GSSPLUGIN"
```

/Applications/dsdriver/db2profileを実行してドライバーパッケージのユーティリティ実行に必要な環境変数を設定します。＜ー重要！！！
環境変数の設定後、db2cliコマンドが使用できるようになるので、先程編集したコマンドを実行します。
以下は実行例です。

```
 % source /Applications/dsdriver/db2profile
 % db2cli writecfg add -database bludb -host xxx.databases.appdomain.cloud -port 30207
db2cli writecfg add -dsn dashdb -database bludb -host xxx.databases.appdomain.cloud -port 30207
db2cli writecfg add -database bludb -host xxx.databases.appdomain.cloud -port 30207 -parameter "SecurityTransportMode=SSL;Authentication=GSSPLUGIN"



===============================================================================
db2cli writecfg completed successfully.
===============================================================================


===============================================================================
db2cli writecfg completed successfully.
===============================================================================


===============================================================================
db2cli writecfg completed successfully.
===============================================================================
```

db2cliコマンドでの設定内容は、/Applications/dsdriver/cfg/db2dsdriver.cfgに書き込まれます。
テキストファイルなので、catコマンドなどで設定内容を確認することが出来ます。
以下は設定内容の確認例です。

```
% cat /Applications/dsdriver/cfg/db2dsdriver.cfg
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
  <databases>
    <database host="xxxx.databases.appdomain.cloud" name="bludb" port="30207">
      <parameter name="SecurityTransportMode" value="SSL"/>
      <parameter name="Authentication" value="GSSPLUGIN"/>
    </database>
  </databases>

  <dsncollection>
    <dsn alias="dashdb" host="xxxx.databases.appdomain.cloud" name="bludb" port="30207"/>
  </dsncollection>


</configuration>
```

## 4. clpplusで接続
apikeyを確認するためIBMCloudのコンソールのWatson Queryの画面で「サービス資格情報」を開きます。
サービス資格情報を開き、apikeyをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/541c0f5b-b7d0-f6e1-8c55-c270e67b2ad1.png)

clpplusを起動して、``connect @dsnalias using (apikey xxxxx)``のようにして接続します。
``@dsnalias``には、db2cliで設定したdsn aliasを指定します。今回は、``@dashdb``になります。

以下のように接続します。

```
% source /Applications/dsdriver/db2profile   # 環境変数を設定していなければ実行する
% clpplus -nw                                # -nwはウィンドウを起動せずターミナル内で起動するオプション
CLPPlus: バージョン 1.6
Copyright (c) 2009, 2011, IBM CORPORATION.  All rights reserved.

SQL> connect @dashdb using ( apikey xxxxxxxxxx ) 

データベース接続情報 :
---------------------------------
ホスト名 = xxxx.databases.appdomain.cloud 
データベース・サーバー = DB2/LINUXX8664  SQL110560 
ローカル・データベース別名 = DASHDB 
ポート = 30207 
```

clpplusで以下のようにSQLを実行できます。


```
SQL> set linesize 180
SQL> select tabschema, count(*) from syscat.tables group by tabschema;

TABSCHEMA                                                                          2
-------------------------------------------------- ---------------------------------
AUDIT                                                                              8
CACHEADMIN                                                                        17
CACHESYS                                                                          10
DB2INST1                                                                           2
DVSYS                                                                             39
DV_IBMID_120000PFMV                                                                3
HIVE                                                                              78
IBMCONSOLE                                                                       269
IBM_RTMON                                                                         11
SYSCAT                                                                           159
SYSHADOOP                                                                         12
SYSIBM                                                                           184
SYSIBMADM                                                                        184
SYSPUBLIC                                                                        112
SYSSTAT                                                                            9
SYSTOOLS                                                                          24

16 個の行が取り出されました。

SQL> values user;

1                                                 
--------------------------------------------------
DV_IAM_SERVICEID_3BE108A1_09DC_4E05_A08C_D917ECF17
672                                               


DB250000I: コマンドは正常に完了しました。

SQL> set current schema = 'DV_IBMID_120000PFMV';

DB250000I: コマンドは正常に完了しました。

SQL> list tables          -- 事前に作成しておいた仮想オブジェクト（TAB2,TAB3はDB2 on Cloudの表、tab10はCOS上のCSVファイル）

表/ビュー            タイプ          スキーマ        作成時間             
-------------------- --------------- --------------- --------------------------
TAB2                 N               DV_IBMID_120000 2021-12-31 00:04:14.660969
                                     PFMV                                      

TAB3                 N               DV_IBMID_120000 2021-12-18 05:28:05.632446
                                     PFMV                                      

tab10                T               DV_IBMID_120000 2021-12-18 05:32:58.417265
                                     PFMV                                      


3 個の行が取り出されました。

SQL> 
```

# 参考情報

Connecting and authenticating to the Watson Query service
https://dataplatform.cloud.ibm.com/docs/content/dvaas/auth-usercred-dv.html

Command line processor plus (CLPPlus)
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-command-line-processor-plus-clpplus