当記事はDb2のCLI(コマンドラインインターフェース)からIBM Cloudのデータ仮想化サービスWatson Query(SaaS版)に接続する方法について説明します。
外部のBIツールなどからWatson Queryには、Db2のJDBCドライバーが使用できればでアクセスすることができますので、もちろんDb2 CLIからもアクセスできるのです!その際、useridではなくAPIKEYが必要です。
GUIでなくてCLIでアクセスしたい(昔からのDb2ユーザーの傾向!)、シェルプログラムでバッチ操作したいなどの場合にお使いください。
ここで確認した環境は以下です:
- Red Hat Enterprise Linux 8
- IBM Data Server Runtime Client v11.5.7
1. APIKEY, 接続情報の準備
今回必要なのは以下の4つです。
- APIKEY
- host名(hostname, IP addressなど)
- port番号
- db名
1-1. APIKEYは以下の2つの方法、どちらかで準備してください。
-
IBM Cloud APIKEYの作成(取得)方法
- これはIBM CloudのIDに紐ついたAPIKEYで権限はそのIDと同じになります
-
Watson QueryのAPIKEYを含む資格情報の作成と接続情報の取得
- こちらはWatson Query用のAPIKEYでManagerかDataAccessかが選べます
1-2. 接続情報は以下の方法で準備してください。
「DBeaverからWatsonQueryにアクセスする」の「1-2. 接続情報は以下のどちらかで取得してください。」に記載の方法で取得します。
2. Watson QueryのDbをカタログする
Watson QueryのDbをリモートDbとして、カタログします。
2-1. Nodeのカタログ
以下のコマンドでカタログします:<>で囲まれた部分は1で取得した自分の情報に入れ替えます
db2 catalog tcpip node <任意のNode名> remote <host名> server <port番号> security ssl
コマンド実行例:
[db2inst1@host-aaa ~]$db2 catalog tcpip node WQNODE remote 00000000-0000-0000-0000-xxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx.databases.appdomain.cloud server 34567 security ssl
DB20000I The CATALOG TCPIP NODE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.
[db2inst1@host-aaa ~]$
2-2. DBのカタログ
以下のコマンドでカタログします:<>で囲まれた部分は1で取得した自分の情報に入れ替えます
db2 catalog db <db名> as <任意のDb別名> at node <2-1で設定した任意のNode名> AUTHENTICATION GSSPLUGIN
APIKEYでアクセスするためAUTHENTICATION GSSPLUGIN
を忘れずに入れます。
コマンド実行例:
[db2inst1@host-aaa ~]$ db2 catalog db bludb as WQDB at node WQNODE AUTHENTICATION GSSPLUGIN
DB20000I The CATALOG DATABASE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.
[db2inst1@host-aaa ~]$
最後に以下のコマンドでdirectory cache をリフレッシュします。
db2 terminate
コマンド実行例:
[db2inst1@host-aaa ~]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@host-aaa ~]$
これで設定は完了です!
3. Watson QueryのDbに接続
APIKEYを使って、 Watson QueryのDbに接続します。
以下のコマンドでカタログします:<>で囲まれた部分は1で取得した自分の情報に入れ替えます
db2 connect to <2-2で設定した任意のDb別名> APIKEY <1で取得したAPIKEYの値>
コマンド実行例:
[db2inst1@host-aaa ~]$ db2 connect to WQDB APIKEY xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Database Connection Information
Database server = DB2/LINUXX8664 11.5.6.0
SQL authorization ID = DV_IAM_S...
Local database alias = WQDB
[db2inst1@host-aaa ~]$
3. Watson QueryのDbでSQLを実行
Db接続後、SQL実行が可能です。
仮想化したテーブル一覧はSYSCAT.NICKNAMES カタログ・ビューに入っているようです。
仮想化したテーブル一覧(スキーマ付き)を取得するSQLサンプル:
db2 "select TABSCHEMA|| '.'||TRIM(TABNAME) as SchemaTableName from SYSCAT.NICKNAMES where TABSCHEMA <> 'DVSYS'"
実行例:
[db2inst1@host-aaa ~]$ db2 "select TABSCHEMA|| '.'||TRIM(TABNAME) as SchemaTableName from SYSCAT.NICKNAMES where TABSCHEMA <> 'DVSYS'"
SCHEMATABLENAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NISHITO .SHAREBIKE_CHIBA
1 record(s) selected.
[db2inst1@host-aaa ~]$
普通に仮想化したテーブルにSELECTできます。以下はSELECTの実行例です:
[db2inst1@host-aaa ~]$ db2 "select ID from NISHITO.SHAREBIKE_CHIBA fetch first 10 rows only"
ID
--------
00301996
00302005
00302008
00302305
00302308
00302324
00302329
00302334
00302339
00302344
10 record(s) selected.
[db2inst1@host-aaa ~]$
使用が終わったら接続を切ります。
db2 connect reset
実行例:
[db2inst1@host-aaa ~]$ db2 connect reset
DB20000I The SQL command completed successfully.
[db2inst1@host-aaa ~]$
以上です。