Db2 Warehouse Client を導入してみた

## **Db2 Warehouse Client とは？**
[Db2 Warehouse Webページ](https://www.ibm.com/analytics/jp/ja/technology/cloud-data-services/dashdb-local/) からの抜粋です。
Db2 Warehouse クライアント・コンテナーは、Db2 Warehouse への移⾏、運⽤、保守を⾏うためのリモート・シェル環境として利⽤できます。

別記事「[Db2 Warehouse SMP構成(シングルノード) x86版 を導⼊してみた](https://qiita.com/m1914uk/items/9e7573dd7f20e31735b5)」とあわせ、導入してみました。

## **導入環境**
導入環境の情報です。
接続確認に使用するDb2 Warehouseコンテナは同サーバで動いています。

- Red Hat Enterprise Linux v7.4 
- Docker Community Edition v18.03
- Db2 Warehouse x86版 v2.7(接続先データベース)
- Db2 Warehouse Client x86版 v2.7

Docker CEはCentOS7はサポートしていますが、RHEL7をサポートしていません。
RHEL7で動かして問題があってもコミュニティで質問するしかないです。

Db2 WarehouseはDocker CEでの動作をサポートしています。
検証している範囲では、RHELでDocker CEを動かしても特に問題はなかったです。

## **Db2 Warehouse Client導入の流れ**
今回は、Db2 Warehouse Client導入と簡単な動作確認をしています。
手順は[Db2 Warehouse クライアント・コンテナーのデプロイ (Linux) (⽇本語版)](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/deploying_client_container.html)を参考にしています。

- Step01. Db2 Warehouse Clientコンテナイメージの取得準備
- Step02. Db2 Warehouse Clientコンテナイメージの取得
- Step03. Db2 Warehouse Clientコンテナの起動
- Step04. Db2 Warehouseへの接続登録
- Step05. コマンドラインからのDB接続
- Step06. テーブルへのデータロード
- Step07. データアンロード

## **Step01. Db2 Warehouse Clientコンテナイメージの取得準備**
コンテナイメージは、Doker Store/Hubレポジトリまたは IBM Boxサイトから取得できます。
今回はDocker Storeからコンテナイメージを取得します。
※イメージ取得にDocker IDが必要です。

### **1). Docker Storeサイトへログイン**
[Docker Storeサイト](https://store.docker.com "Docker Store")に接続し、Docker IDでログインします。		


### **2). Db2 Warehouse Client コンテナの検索**
「Db2 Warehouse Client コンテナ」を条件に検索します。		
			
![image.png](https://qiita-image-store.s3.amazonaws.com/0/253673/18dd12cb-8f6b-a315-f35c-6926d5cbe64a.png)

検索結果から「IBM Db2 Warehouse client container」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/255671/d2068554-3b49-fe1c-13b2-205e338bd244.png)


### **3). Db2 Warehouse Client コンテナのチェックアウト**
画面右の Proceed to Checkout をクリックし、チェックアウトします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/253673/fa3128f5-4d0f-8885-34b3-bd3dd37578cd.png)

### **4). Db2 Warehouse Clientコンテナの取得**
利用規約に同意し、Db2 Warehouse Clientコンテナのコンテンツを取得します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/253673/2b0eefac-c45b-8c00-6e42-d0b79234db3d.png)

### **5). コマンドおよび手順の確認**
コンテナイメージのpullコマンドを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/253673/56627bf3-8fea-b678-43f0-caf46759a223.png)

## **Step02. Db2 Warehouse Clientコンテナイメージの取得**
Docker StoreからサーバへDb2 warehouse clientコンテナイメージを取得します。

### **1). Docker レジストリサーバーにログイン**
Docker Storeからコンテナイメージを取得するため、Docker IDでログインします。

```:
[root@eo01 ~]# docker login -u='docker_id' -p='password'
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
```

### **2). Db2 Warehouse Clientコンテナイメージの取得**
docker pullコマンドで、コンテナイメージを取得します。
「[Step02. 5). コマンドおよび手順の確認](https://qiita.com/m1914uk/private/7afe8bef7cf5cf61ea16#5-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8A%E3%82%88%E3%81%B3%E6%89%8B%E9%A0%86%E3%81%AE%E7%A2%BA%E8%AA%8D)」で確認したpulコマンドを実行します。

```:
[root@eo01 ~]# docker pull store/ibmcorp/db2wh_ce:v2.7.0-db2wh_client-linux
v2.7.0-db2wh_client-linux: Pulling from store/ibmcorp/db2wh_ce
18b8eb7e7f01: Already exists
・・・(省略)・・・
21da8c9ec911: Pull complete
Digest: sha256:a223736b7ed204082566cfcb7e1bc5a62b44dc79dfd93bc74ab87c8abff56176
Status: Downloaded newer image for store/ibmcorp/db2wh_ce:v2.7.0-db2wh_client-linux
```
### **3). コンテナイメージの確認**
docker imagesコマンドで取得したコンテナイメージを表示します。
「v2.7.0-db2wh_client-linux」が取得できています。

```:
[root@eo01 ~]# docker images
REPOSITORY                              TAG                         IMAGE ID            CREATED             SIZE
store/ibmcorp/db2wh_ce                  v2.7.0-db2wh_devc-linux     5ffc805a633c        4 days ago          7.72GB
store/ibmcorp/db2wh_ce                  v2.7.0-db2wh_client-linux   38c7d93fbfd8        5 days ago          3.28GB
```

## **Step03. Db2 Warehouse Clientコンテナの起動**
取得したコンテナイメージを使用して、Db2 Warehouse Clientコンテナを起動します。

### **1). コンテナの起動**
コンテナを作成するため、docker runコマンドを実行します。

```:
[root@eo01 ~]# docker run -dit --net=host --name=client2.7 \
-v /mnt/tools:/mnt/clientdir \
-v /mnt/clusterfs/home/db2inst1:/mnt/blumeta0/home/db2inst1 \
store/ibmcorp/db2wh_ce:v2.7.0-db2wh_client-linux
```

※1　ホストの/mnt/toolsをコンテナの/mnt/clientdir にマウントします。
　　　デプロイを開始する前に、ファイル・システムが空にする必要があります。

※2　ホストの/mnt/clusterfs/home/db2inst1をコンテナの/mnt/blumeta0/home/db2inst1にマウントします。
　　　デプロイを開始する前に、ファイル・システムが空にする必要があります。

※3  -e REMOTE_DB=server[:port] パラメーターはリモートDb2 Warehouse データベースをカタログできます。
　　　指定しない場合、デプロイ後にdb_catalog の実行が必要です。
　　　今回はデプロイ後に設定します。

### **2). コンテナのログを確認**
コンテナログを確認し、正常起動を確認します。
「successfully」 メッセージを出力しているので成功ですね。

```:
[root@eo01 ~]# docker logs --follow client2.7
Starting up IBM Db2 Warehouse client container...
Creating Db2 client instance home and setup user environment
Creating client container directory structure and setup access controls
Verified existing database instance

#######################################################################
###  IBM Db2 Warehouse client container was deployed successfully   ###
#######################################################################

* If you used docker logs to monitor progress,
  detach from the console by pressing Ctrl+C.
* To get a command line from a prompt on the host,
  issue the following command:
     docker exec -it <client container name> cli

#######################################################################
```

## **Step04. Db2 Warehouseへの接続登録**

Clientコンテナが起動しました。
次はコンテナへ接続し、Db2 Warehouse BLUDBデータベースへの接続情報を登録(カタログ)します。
登録には[db_catalogコマンド](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/db_catalog.html)を使用しています。

### **1). クライアント・コンテナーに接続**
Db2 warehouse clientコンテナに接続します。

```:
[root@eo01 ~]# docker exec -it client2.7 cli

***********************************************************************
*                                                                     *
*    Welcome to IBM Db2 Warehouse client container interactive CLI    *
*                                                                     *
***********************************************************************

Last login: Wed May  2 01:47:58 UTC 2018 on pts/1
```

### **2). 登録前の確認**
「-l」オプションで登録情報を確認します。
何も登録されていないですね。

```:
[Db2wh - Client CLI ~]\> db_catalog -l
   Retrieving alias information...

 ALIAS    | DATABASE | PORT  | SSL |  HOSTNAME
----------+----------+-------+-----+--------------

[Db2wh - Client CLI ~]\>
```

### **3). データベース接続の登録**
「-add」オプションで接続情報を登録します。
「The remote database cataloged successfully as: BLUDB_7」と出力されています。
別名を指定しないと適当な番号が振られるようです。

```:
[Db2wh - Client CLI ~]\> db_catalog --add localhost:50000
Running connectivity test against remote database server: localhost port 50000 ...
Cataloging the remote database from localhost ...
The remote database cataloged successfully as: BLUDB_7
[Db2wh - Client CLI ~]\>
```

### **4). 登録後の確認**
「-l」オプションで登録情報を確認します。
「BLUDB」の接続が登録されていますね。

```:
[Db2wh - Client CLI ~]\> db_catalog -l
   Retrieving alias information...

 ALIAS    | DATABASE | PORT  | SSL |  HOSTNAME
----------+----------+-------+-----+--------------
 BLUDB_7  | BLUDB    | 50000 | NO  | localhost

[Db2wh - Client CLI ~]\>
```

CLPでも確認してみます。
同じく登録されていますね。

```:
[Db2wh - Client CLI ~]\> db2 list database directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = BLUDB_7
 Database name                        = BLUDB
 Node name                            = DB2WH_87
 Database release level               = 14.00
 Comment                              =
 Directory entry type                 = Remote
 Catalog database partition number    = -1
 Alternate server hostname            =
 Alternate server port number         =
```

## **Step05. コマンドラインからのDB接続**

接続情報を登録したので、Db2 Warehouse Clientコンテナからデータベースへ接続してみます。
提供されている[dbsqlコマンド](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.apdv.porting.doc/doc/dbsql_command.html)を使用しています。

|名称|説明|
|:---|:---|
|dbsql|nzsql互換のコマンドラインインターフェース|
|CLP|Db2標準のコマンドラインインターフェース|
|CLPPlus|Oracle互換のコマンドラインインターフェース|

### **1). クライアント・コンテナーに接続**
Db2 warehouse clientコンテナに接続します。

```:
[root@eo01 ~]# docker exec -it client2.7 cli

***********************************************************************
*                                                                     *
*    Welcome to IBM Db2 Warehouse client container interactive CLI    *
*                                                                     *
***********************************************************************
```

### **2). dbsqlコマンドの実行**
Clientコンテナから対話形式でデータベースに接続します。
SQLでシステム日付を取得できました。
コマンドラインは(\q)で終了できます。

```:
[Db2wh - Client CLI ~]\> dbsql -d bludb -u bluadmin
Password:
Welcome to IBM dbsql, an interactive SQL terminal.

Type:  \? for help with internal slash commands
      \g or terminate with semicolon to execute query
      \q to quit

BLUDB.BLUADMIN(BLUADMIN)=>
BLUDB.BLUADMIN(BLUADMIN)=> select current date from sysibm.sysdummy1;
1
------------
2018/5/29
(1 row)

BLUDB.BLUADMIN(BLUADMIN)=> \q
[Db2wh - Client CLI ~]\>
```

## **Step06. テーブルへのデータロード**
次に[dbloadコマンド](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.apdv.porting.doc/doc/dbload_command.html)を使用し、Clientコンテナからテーブルへデータをロードしてみます。

### **1).テーブルの作成**
データロードを行うテーブルを作成します。

```:
[Db2wh - Client CLI ~]\>dbsql -d bludb -u bluadmin -c "create table CLIENTLOAD (col1 integer,col2 integer)" 
Password:
CREATE TABLE
[Db2wh - Client CLI ~]\>
```
### **2).ロードデータの作成**
Clientコンテナに作成したロード用データです。

```:
[Db2wh - Client CLI ~]\> pwd
/mnt/blumeta0/home/db2inst1
[Db2wh - Client CLI ~]\>
[Db2wh - Client CLI ~]\> cat loadsample.dat
1,100
2,200
3,300
[Db2wh - Client CLI ~]\>
```

※DATファイルはコンテナ作成時に-vオプションでマウントしているディレクトリへ格納しています。
（今回の例では/mnt/blumeta0/home/db2inst1）

### **3).dbloadコマンドの実行**

dbloadコマンドでデータロードを行います。
「completed successfully」のメッセージが出ているので、成功です。
ログに「'bludb.bluadmin.CLIENTLOAD'」って出ていますね。

```:
[Db2wh - Client CLI db2inst1]\> dbload -host <host_name> -port 50000 -u bluadmin -pw <password> -db bludb -schema bluadmin -t CLIENTLOAD -df /mnt/blumeta0/home/db2inst1/loadsample.dat -delim ','
============================== Load session:   1 ==============================
Connecting to: 'bludb'
Connected to: 'bludb'

'log' file: '/mnt/clientdir/clienthome/db2inst1/logs/dbload/CLIENTLOAD.bluadmin.bludb.log'
'bad' file: not found

Load session of table 'bludb.bluadmin.CLIENTLOAD' completed successfully
Session started: 2018-05-29 09:20:45
Session ended:   2018-05-29 09:20:47
Elapsed time [hh:mm:ss]: 00:00:02
===============================================================================
[Db2wh - Client CLI db2inst1]\>
```

### **4).データロードの結果確認**
SELECT文を投げてみたところ、データが入っています。

```:
[Db2wh - Client CLI db2inst1]\> dbsql -d bludb -u bluadmin -c "select * from clientload"
Password:
COL1 | COLW
------+------
   1 |  100
   2 |  200
   3 |  300
(3 rows)

[Db2wh - Client CLI db2inst1]\>
```

## **Step07. データアンロード**
最後に[dbunloadコマンド](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.apdv.porting.doc/doc/dbunload_options.html)を使用し、Db2 Warehouseコンテナのテーブルからデータをアンロードしてみます。

### **1).dbunloadコマンドの実行**
コマンドからデータアンロードを実行します。
「completed successfully」のメッセージが出ているので、成功です。
こちらもログに「'bludb.bluadmin.CLIENTLOAD'」って出ていますね。

```:
[Db2wh - Client CLI db2inst1]\> dbunload -host <host_name> -port 50000 -u bluadmin -pw <password> -db bludb -schema bluadmin -t CLIENTLOAD -df /mnt/blumeta0/home/db2inst1/unloadsample.csv -delim ','
============================= Unload session:   1 =============================
Connecting to: 'bludb'
Connected to: 'bludb'
Unload session of table 'bludb.bluadmin.CLIENTLOAD' completed successfully
Session started: 2018-05-29 09:46:08
Session ended:   2018-05-29 09:46:08
Elapsed time [hh:mm:ss]: 00:00:00
===============================================================================
[Db2wh - Client CLI db2inst1]\>
```

### **2).データロードの確認**
データアンロードされ、Clientコンテナ上のファイルへデータ出力されています。

```:
[Db2wh - Client CLI db2inst1]\> cat /mnt/blumeta0/home/db2inst1/unloadsample.csv
1,100
2,200
3,300
[Db2wh - Client CLI db2inst1]\>
```

## **終わりに**
以上、Db2 Warehouse Clientの導入と動作確認でした。
Db2クライアントを入れず、接続登録（カタログ）だけで使えるのが嬉しいですね。

## **参考にした情報**
- [Db2 Warehouse Webページ](https://www.ibm.com/analytics/jp/ja/technology/cloud-data-services/dashdb-local/) 

- [Db2 Warehouse クライアント・コンテナーのデプロイ (Linux) (⽇本語版)](https://www.ibm.com/support/knowledgecenter/ja/SS6NHC/com.ibm.swg.im.dashdb.doc/admin/deploying_client_container.html)

- [Db2 Warehouse (旧 dashDB Local) 利用ガイド](https://www.ibm.com/developerworks/jp/analytics/library/ba-db2-warehouse-guide/index.html)

- [Db2 Warehouse SMP構成 導入ガイド](https://ibm.ent.box.com/s/udacq42x8fcqwkez3r6vk1lkrluftzxe/file/267496468760)

- [Db2 Warehouse 運用管理ガイド](https://ibm.ent.box.com/s/udacq42x8fcqwkez3r6vk1lkrluftzxe/file/273387085675)