Macから"IBM Db2 Warehouse on Cloud" (旧DashDB）へコマンドライン接続


ORACLEならsqlplus、DB2ならdb2、MySQLなら mysql、PostgreSQLならpsql、では Bluemix Db2 Warehouse on Cloud (旧dashDB）へ繋ぐには、どうしたら良いの？　ということで調べたメモです。 Macの開発環境から、Bluemix の IBM Db2 Warehouse on Cloud へ、コマンドラインツール clpplus から、暗号通信でアクセスするための情報を整理したものです。 この記事では IBM Db2 Warehouse on Cloud は長いので 愛称として dashDB として記載します。


## IBM Db2 Warehouse on Cloud (愛称dashDB）とは

dashDB は、分析機能を兼ね備えたDBaaSで、地理空間データなどの特殊な型のデータを含むリレーショナル・データを保存することができます。また保存したデータを SQL で分析することもできれば、組み込まれた高度なアナリティクス機能を利用して分析することもでき、予測分析やデータ・マイニング、R言語による分析、地理空間分析などが提供されています。さらにインメモリーのデータベース・テクノロジーにより列指向表と行指向表を混在させることも可能です。dashDBの組み込み分析機能と超並列処理(MPP)によって、クラウド・データウェアハウスのデータから高速に洞察を得ることができます。(1)


## 目標とすること
Macの開発環境に、clpplus をインストールして、Bluemix で作成した dashDB の インスタンスへ接続して、テーブルを作成、Selectを実行するまでを実施します。

![スクリーンショット 2017-07-26 12.17.55.png](https://qiita-image-store.s3.amazonaws.com/0/42829/1c6f5972-34f4-9bb4-e460-13cfdd733013.png "スクリーンショット 2017-07-26 12.17.55.png")


## clpplus のダウンロード

dashDBへコマンドでアクセスするには、下記の二つの方法があります。

* DB2 ランタイム・クライアント （愛称 db2コマンド）
* clpplus コマンド

この clpplus は、Db2ドライバ・パッケージに含まれています。 [Download initial Version 11.1 clients and drivers](https://www-01.ibm.com/support/docview.wss?uid=swg21385217) のダウンロードページからパッケージを入手することができます。(3)

それから、IBM Support の [Download initial Version 11.1 clients and drivers](https://www-01.ibm.com/support/docview.wss?uid=swg21385217) には、ランタイム・クライアントなど関連するダウンロードのリンク集があります。(4)

ここでは、必要最小限軽量の clpplus を利用します。 clpplus は、Javaアプリケーションなので、利用にはJREがインストールされている必要があります。

## IBM Db2 Warehouse on Cloud (愛称dashDB）のサービス作成
Bluemix カタログ [データ＆分析](https://console.bluemix.net/catalog/?taxonomyNavigation=apps&env_id=ibm:yp:us-south&category=data)の次のところから、dashDBのサービスを作成しておきます。

![スクリーンショット 2017-07-26 14.30.37.png](https://qiita-image-store.s3.amazonaws.com/0/42829/41ffc340-b466-2572-8308-3b45bf0d5a98.png "スクリーンショット 2017-07-26 14.30.37.png")



## インストール

[Installing the Db2 driver package on Mac OS X ](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/connecting/connect_driver_package_install_mac.html)(5) の説明に従って、installDSDriver.shを実行してインストールします。 

インストールすれば、すぐに利用できるかというと、もう少し作業が必要です。 次の様に、.bash_profile を編集して、db2profile を読み込む様にします。 この辺りの設定は、前述の説明に書かれていないので注意が必要です。 昔からDB2を使ってきた人には、同じみの作業ですけどね。

~~~
imac:~ maho$ vi .bash_profile
imac:~ maho$ tail .bash_profile

. /Applications/dsdriver/db2profile 
~~~


Macのターミナル・ウィンドを開いて、以下のコマンドが動作すれば、準備完了です。

~~~
# db2cli
~~~


## 接続情報の登録

dashDBの接続に必要な情報は、サービスのインスタンス画面の「サービス資格情報」の画面から取得できます。

![スクリーンショット 2017-07-26 12.48.28.png](https://qiita-image-store.s3.amazonaws.com/0/42829/254bb9e8-b151-e252-fd98-69cabc318b8d.png "スクリーンショット 2017-07-26 12.48.28.png")

サービス・インスタンスで設定されているキーのリストを表示します。

~~~
$ bx cf sk "Db2 Warehouse on Cloud-vb" 
'cf sk Db2 Warehouse on Cloud-vb' を起動しています...

tkr9955@yahoo.co.jp としてサービス・インスタンス Db2 Warehouse on Cloud-vb のキーを取得しています...

名前
Credentials-1
Credentials-2
~~~
利用するキーを指定して、JSON形式の認証情報を表示、ユーザーIDなどの情報を取得します。

~~~
$ bx cf service-key "Db2 Warehouse on Cloud-vb" Credentials-2
'cf service-key Db2 Warehouse on Cloud-vb Credentials-2' を起動しています...

tkr9955@yahoo.co.jp としてサービス・インスタンス Db2 Warehouse on Cloud-vb のキー Credentials-2 を取得しています...

{
 "db": "BLUDB",
 "dsn": "DATABASE=BLUDB;HOSTNAME=bluemix05.bluforcloud.com;PORT=50000;PROTOCOL=TCPIP;UID=*****;PWD=*****",
 "host": "bluemix05.bluforcloud.com",
 "hostname": "bluemix05.bluforcloud.com",
 "https_url": "https://bluemix05.bluforcloud.com:8443",
 "jdbcurl": "jdbc:db2://bluemix05.bluforcloud.com:50000/BLUDB",
 "password": "*****",
 "port": 50000,
 "ssldsn": "DATABASE=BLUDB;HOSTNAME=bluemix05.bluforcloud.com;PORT=50001;PROTOCOL=TCPIP;UID=*****;PWD=*****;Security=SSL;",
 "ssljdbcurl": "jdbc:db2://bluemix05.bluforcloud.com:50001/BLUDB:sslConnection=true;",
 "uri": "db2://*****:*****@bluemix05.bluforcloud.com:50000/BLUDB",
 "username": "*****"
}
~~~


## 接続設定
DB2文化として、カタログとエリアスを作成して、エリアスを利用して接続するというものがあります。この方法のメリットは、エリアスを指定すれば、いちいち毎回インプットしなくても良いという、メインフレームの 3270ターミナル でログインしていた時代に、インプットを減らす工夫ですね、

ということで、何でとか思わずに、３つの設定を進めます。

~~~
imac:~ maho$ db2cli writecfg add -database BLUDB -host bluemix05.bluforcloud.com -port 50001

===============================================================================
db2cli writecfg completed successfully.
===============================================================================
~~~

~~~
imac:~ maho$ db2cli writecfg add -dsn dash -database BLUDB -host bluemix05.bluforcloud.com -port 50001

===============================================================================
db2cli writecfg completed successfully.
===============================================================================
~~~

~~~
imac:~ maho$ db2cli writecfg add -database BLUDB -host bluemix05.bluforcloud.com -port 50001 -parameter "SecurityTransportMode=SSL"

===============================================================================
db2cli writecfg completed successfully.
===============================================================================
~~~

ここで、変な話ですが、-passwd の後に続く文字列は、シングル・クォーテーションで囲むのがポイントです。 パスワードに@マークが入っていて、ダブル・クォーテションの場合、メタ・キャラと取られるので、シングルでなければなりません。

~~~  
imac:~ maho$ db2cli validate -dsn dash -connect -user ***** -passwd '*****'

===============================================================================
Client information for the current copy:
===============================================================================

Client Package Type       : IBM Data Server Driver Package
Client Version (level/bit): DB2 v11.1.0.0 (s1606081100/64-bit)
Client Platform           : Darwin
Install/Instance Path     : /Applications/dsdriver
DB2DSDRIVER_CFG_PATH value: <not-set>
db2dsdriver.cfg Path      : /Applications/dsdriver/cfg/db2dsdriver.cfg
DB2CLIINIPATH value       : <not-set>
db2cli.ini Path           : /Applications/dsdriver/cfg/db2cli.ini
db2diag.log Path          : /Applications/dsdriver/db2dump/db2diag.log

===============================================================================
db2dsdriver.cfg schema validation for the entire file:
===============================================================================

Success: The schema validation completed successfully without any errors.

===============================================================================
db2cli.ini validation for data source name "dash":
===============================================================================

Note: The validation utility could not find the configuration file db2cli.ini. 
The file is searched at "/Applications/dsdriver/cfg/db2cli.ini".

===============================================================================
db2dsdriver.cfg validation for data source name "dash":
===============================================================================

[ Parameters used for the connection ]

Keywords                  Valid For     Value
---------------------------------------------------------------------------
DATABASE                  CLI,.NET,ESQL BLUDB
HOSTNAME                  CLI,.NET,ESQL bluemix05.bluforcloud.com
PORT                      CLI,.NET,ESQL 50001
SECURITYTRANSPORTMODE     CLI,.NET      SSL

===============================================================================
Connection attempt for data source name "dash":
===============================================================================

[SUCCESS]

===============================================================================
The validation is completed.
===============================================================================
~~~


これで設定が正しいことが確認できましたので、clpplusでログインします。

~~~
imac:~ maho$ clpplus -nw *****@*****   (これは username@alias です）
CLPPlus: バージョン 1.6
Copyright (c) 2009, 2011, IBM CORPORATION.  All rights reserved.

パスワードを入力してください: ************

データベース接続情報 :
---------------------------------
ホスト名 = bluemix05.bluforcloud.com 
データベース・サーバー = DB2/LINUXX8664  SQL11019 
SQL 許可 ID = *****
ローカル・データベース別名 = DASH 
ポート = 50001 

SQL> 
~~~

これで接続まで完了しました。


## SQLのバッチ実行

唐突ですが、clpplus の マニュアルは、[Command line processor plus (CLPPlus)](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.swg.im.dbclient.clpplus.doc/doc/c0053823.html)が便利です。

次のSQLを実行して、テーブルを作成、データをセット、クエリーを実行してみます。 内容は、MySQL, PostgreSQLの記事と同じで、Db2のSQLに少し変えてあります。 (id INTEGER... の部分)

~~~file:setup.sql
DROP TABLE animals;

CREATE TABLE animals (
     id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
     name VARCHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;
~~~

このファイルを実行するには、start または、@ の後にファイル名を続けます。

~~~
SQL> @ setup.sql
DB250000I: コマンドは正常に完了しました。
DB250000I: コマンドは正常に完了しました。
DB250000I: コマンドは正常に完了しました。
         ID NAME                          
----------- ------------------------------
          1 dog                           
          2 cat                           
          3 penguin                       
          4 lax                           
          5 whale                         
          6 ostrich                       

6 個の行が取り出されました。
~~~


## dashDBのマニュアルの探した方

[dashDBのマニュアル](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.kc.doc/welcome.html)は、ここにあるのですが、つい、下の字の小さなリンクが並んでいる場所に目が奪われがちなのですが、左端の目次タブをクリックすると、オンライン・マニュアルの目次が出てきます。 最初は見落として時間を無駄にしてしまいました（泣）

![スクリーンショット 2017-07-26 14.06.12.png](https://qiita-image-store.s3.amazonaws.com/0/42829/d1a3bb32-f9aa-b1e7-35fc-0ccd9fb409e5.png "スクリーンショット 2017-07-26 14.06.12.png")

前述のマニュアルは英語なので、日本語が良い場合には、ちょっと古いですが、[DB2 v9.7のオンライン・マニュアル](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.db2.luw.container.doc/doc/c0055507.html)が参考になります。

![スクリーンショット 2017-07-26 14.11.01.png](https://qiita-image-store.s3.amazonaws.com/0/42829/c5fd09a4-088e-d11c-2b05-7d44aaad82b0.png "スクリーンショット 2017-07-26 14.11.01.png")



## まとめ

DB2系製品は、IBMのソフトウェア製品の中でも、メインフレーム主流の時代から長年の歴史があり、スキル保有者も多い優れたソフトウェアと思います。そのDB2 SQLの遺産を引き継いで、高速なデータベースとして Bluemix のクラウドで提供されているのが、dashDB (本名 Db2 Warehouse on Cloud) です。 非常に優れた製品でありながら、知る人ぞ知る寂しい存在になっているので、ぜひ、クラウドで日の目を見て欲しいと思います。

ちょっと、OSS系RDBのSQLと比べると 硬いですね。。。


## 参考資料

(1) IBM dashDB https://www.ibm.com/analytics/jp/ja/technology/cloud-data-services/dashdb/
(2) IBM Knowledge Center Db2 driver package https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/connecting/connect_driver_package.html
(3) Download initial Version 11.1 clients and drivers https://www-01.ibm.com/support/docview.wss?uid=swg21385217
(4) IBM Support Download initial Version 11.1 clients and drivers https://www-01.ibm.com/support/docview.wss?uid=swg21385217
(5) Installing the Db2 driver package on Mac OS X https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/connecting/connect_driver_package_install_mac.html
(6) DB2 Version 9.7 for Linux, UNIX, and Windows Command line processor plus (CLPPlus)（日本語） https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.swg.im.dbclient.clpplus.doc/doc/c0053823.html