【OpenScaleメモ】OpenScaleで内部DBにアクセスする (Mac版)

# はじめに
Watson Openscaleでいろいろ検証する場合に、Openscale用の内部DBにアクセスすることはほぼ必須です。
石田さんの記事[小ネタ: Watson OpenScaleのInternalDBの中身を見る](https://qiita.com/ishida330/items/a66ca4f2deb09d3b049e)を参考に、自分用の要点メモを作りました。

# 必要情報の入手
最終的にPythonのAPI呼出しで情報を入手するのですが、そのためには次の3つの情報が必要です。

- platform_apikey
- data_mart_id
- subscription_id

順番にどうやって入手するか説明します。

### platform_apikey
IBM CloudのIAMの機能で作成します。

[IBM Cloud ダッシュボード](https://cloud.ibm.com)

-> 「Manage」->「Access(IAM)」
![スクリーンショット 2019-05-15 10.25.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/9d877e42-a61d-7cae-f4d6-c04b1a389513.png)

「IBM Cloud APIキー」->「IBM Cloud APIキーの作成」

![スクリーンショット 2019-05-15 10.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/5452887e-4379-3418-34a3-753ef5d19096.png)

作成したキーは、クリップボードにコピーし、テキストエディタなどに保存しておきます。

### data_mart_id

OpenScaleのUIで、左の上から4つ目のアイコンをクリックすると、「Configuration Summary」の画面が表示されます。この中にこの項目があります。

![スクリーンショット 2019-05-15 10.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/bfc01be8-a420-7b9f-115a-27a444f5b7e0.png)

### subscription_id

OpenScaleのモデル別ダッシュボードの画面右下の「Make a scoring request」のリンクをクリック

![スクリーンショット 2019-05-15 10.38.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/15538b28-72f9-1bbf-293d-c550932bd56d.png)

次の画面が出てきたら、下にスクロールして、snippetのコードを「show more」で詳細表示にします。

![スクリーンショット 2019-05-15 10.40.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/ddbb3334-e73d-9f39-ed49-2563b24770d4.png)

コードの中に``subscription_id``の値も含まれています。

![スクリーンショット 2019-05-15 10.40.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/a3468131-3c65-2099-9cbe-5d4aec1b25b2.png)

# APIの呼出し

これで準備は整いました。石田さんが紹介しているPython CodeをWatson StudioのJupyter Notebookから実行します。

```py3
#  Watson OpenScaleのinternalDBの接続情報の入手
import requests, json

# IAM Tokenの入手
def getToken(apikey):
    url = 'https://iam.bluemix.net/identity/token'
    header = {'Content-Type': 'application/x-www-form-urlencoded', 
        'Accept': 'application/json'}
    payload = {'grant_type': 'urn:ibm:params:oauth:grant-type:apikey', 
        'apikey': apikey}
    response = requests.post(url, payload, headers=header).json()
    return response['access_token']


def getDBInfo():

    ##  CHANGE ME
    ##  platform_apikey ... IBM Cloudの 管理 - セキュリティ - プラットフォームAPIキー より作成
    ##  data_mart_id    ... AIOSの構成パネルより
    ##  subscription_id ... AIOSの構成パネルより
    aios_env ={
            "url": "https://api.aiopenscale.cloud.ibm.com",
            "platform_apikey": "xxxxx",
            "data_mart_id"   : "xxxxx",
            "subscription_id": "xxxxx"
    }

    aios_url = aios_env['url']+'/v1/data_marts/'+aios_env['data_mart_id']
    header = {'Content-Type': 'application/json', 
        'Authorization': 'Bearer ' + getToken(aios_env['platform_apikey'])}
    payload = {'subscription_id': aios_env['subscription_id']}
    response = requests.get(aios_url, payload, headers=header).json()
    return response['database_configuration']['credentials']['uri']
    # 新しいインスタンスではこちらのレイアウトの場合も
    # return response['database_configuration']['credentials']['connection']['postgres']['composed'][0]

print(getDBInfo())
# --> postgres://admin:XXXXXXXXJKAYMKLJ@sl-us-south-1-portal.31.dblayer.com:65382/compose
```

最後のコメント文のような形で結果が返ってきますので、ここから下記の必要情報を抽出します。

```
user: admin
pass: xxxxx
host: xxxxx
port: xxxxx
database: compose
```

# pgadmin4の導入

以下のコマンドで導入します。


```
$ brew cask install pgadmin4
```

# 接続の設定
導入が終わったら、「pgadmin 4」というプログラムがアプリケーションフォルダーにできているはずなので、これを起動します。

「Add New Server 」をクリック

![スクリーンショット 2019-05-15 10.53.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/1d1a0270-06e7-445b-c2e6-c97229df88f3.png)

Generalタブで名前を入力した後で、Connectionタブを表示し、赤枠の中を設定します。

![スクリーンショット 2019-05-15 10.53.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/7da913e7-1324-2f91-de1f-3296e274af5a.png)

# ツールの利用

直感的に使えるツールなので、使い方は省略します。うまくいくと、下記のようにどんなテーブルができているか、その中身がどうなっているかを確認できます。

![スクリーンショット 2019-05-15 10.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/536e8455-aed1-dc1f-2699-a038cbe2d4d9.png)