以下の記事にてwatsonx.dataで安価なオブジェクトストレージにテーブルicos1.hr.hr_training
を作成してデータを投入したので、そのデータをCognosからJDBC接続して分析してみた記事です。
watsonx.dataはオープンなデータレイクハウス・アーキテクチャに基づいて構築されており、大容量のデータを安価に保存できるオブジェクトストレージにテーブルを作成したり、他のデータベースを統合することができ、それらのデータベースのデータをwatsonx.dataに組み込まれているオープンソースのPrestoエンジンを使って横断的にSQL文でアクセスできます。
この記事の内容
- 以下の環境を作って試しました
-
IBM Cloud Pak for Data(CP4D)上にwatsonx.dataとCognos Analytics with Watsonを導入
- CP4D バージョン: 4.7.3
- watsonx.data (SW版) バージョン: 1.0.3
- Cognos Analytics with Watson バージョン: 24.3.0
-
IBM Cloud Pak for Data(CP4D)上にwatsonx.dataとCognos Analytics with Watsonを導入
- Cognos Analytics with Watson(Cognos)からwatsonx.dataのPrestoエンジンに接続するために、Presto JDBCドライバーをダウンロードし、Cognosに組み込み、watsonx.dataとの接続設定を行いました
- Cognosで分析するテーブルに関する構成を行いました
- Cognosにダッシュボードを作成し、データ分析するための構成を行い、データを分析してみました
- Cognosにはさまざまなレイアウトのテンプレート、データをビジュアライゼーションするためのさまざまなパーツが用意されており、その一部を使ってデータを分析してみました
なお、Cognos側の設定は、他のJDBCドライバーでも共通の設定なので、そのような場合でも参考にしていただけると幸いです。
手順の流れ
この手順は以下のようになる。
- Presto JDBCドライバー・ファイルをダウンロードして動作確認してみる
- CognosにJDBCドライバー・ファイルをインポートする
- Cognosにwatsonx.dataとの接続設定を行う
- Cognosに分析するテーブルが含まれるスキーマをインポートする
- Cognosにコンテンツを追加する
- Cognosのダッシュボードを作成してデータを分析する
1. Presto JDBCドライバー・ファイルをダウンロードして動作確認してみる
以下のサイトからPresto JDBCドライバーをダウンロードする。(ダウンロードしたファイル名: presto-jdbc-0.284.jar)
-
https://prestodb.io/docs/current/installation/jdbc.html
(JDBCクラス名: com.facebook.presto.jdbc.PrestoDriver)
上記のほかに、watsonx.dataのPrestoエンジンに接続するためには以下の情報が必要となる。
- ホスト名
- ポート番号
- ユーザーID
- パスワード
(*) 以下はwatsonx.dataのSW版の情報取得方法についてです。SaaS版については以下を参照してください。
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得
ホスト名とポート番号を得るために、watsonx.dataのインフラストラクチャー・マネージャー
に表示されているPrestoエンジンをクリックする。
以下のようにPrestoエンジンの情報が表示される。External host
がホスト名で、watsonx.dataのSW版のExternal host
のポート番号は443である。
ユーザーIDとパスワードはCP4Dにログインしたものが使用可能で、今回はデフォルトで使用可能となっているadminを使用する。
項目 | 値 |
---|---|
ホスト名 | ibm-lh-lakehouse-presto-01-presto-svc-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud |
ポート番号 | 443 |
ユーザーID | admin |
パスワード | xxx |
JDBCドライバー・ファイル名 | presto-jdbc-0.284.jar |
JDBCドライバー・クラス名 | com.facebook.presto.jdbc.PrestoDriver |
また、PrestoエンジンにTLS/SSLで接続する場合、プロパティとしてSSL=true
をセットする。
プロパティ | 値 |
---|---|
SSL | true |
JavaのプログラムでJDBC接続を確認してみる。
import java.sql.*;
import java.util.Properties;
public class PrestoAccessTest {
public static void main (String[] args)
{
String url = "jdbc:presto://ibm-lh-lakehouse-presto-01-presto-svc-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud:443";
Properties properties = new Properties();
properties.put("user", "admin");
properties.put("password", "xxx");
properties.put("SSL", "true");
Connection con = null;
try {
Class.forName("com.facebook.presto.jdbc.PrestoDriver").getDeclaredConstructor().newInstance();
} catch (Exception e) {
System.out.println("Error: failed to load PrestoDriver.");
System.exit(1);
}
try {
con = DriverManager.getConnection(url, properties);
String sql = "SELECT distinct year, organization, department FROM icos1.hr.hr_training limit 3";
System.out.println(sql);
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next())
{
int year = rs.getInt(1);
String org = rs.getString(2);
String dept = rs.getString(3);
System.out.println(year + ", " + org + ", " + dept);
}
con.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
System.exit(0);
}
}
CLASSPATH
環境変数をセットし、コンパイルしてから実行してみる。
$ export CLASSPATH=.:./presto-jdbc-0.284.jar:$CLASSPATH
$ javac PrestoAccessTest.java
$ java -cp $CLASSPATH PrestoAccessTest
SELECT distinct year, organization, department FROM icos1.hr.hr_training limit 3
2014, GO Americas corporate, Human Resources
2014, GO Americas corporate, Finance
2014, GO Americas corporate, Marketing
SELECT文の結果が返ってきており、問題なく動作している。
2. CognosにJDBCドライバー・ファイルをインポートする
以下のガイドを参照した。
実行するのに必要な変数を環境変数にセットする。
CPDURL
はCognosが起動しているホスト名で、NAMESPACE
はCP4Dを導入する際にセットしたPROJECT_CPD_INST_OPERANDS
環境変数の値である。
USERID
とPASSWORD
はCognosにアクセス可能なもので、今回はCP4D導入時にデフォルトでアクセス可能となっているadmin
ユーザーを使用している。
環境変数 | 値 |
---|---|
CPDURL | https://cpd-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud |
NAMESPACE | cpd-instance |
DRIVERSURL | \${CPDURL}/cognosanalytics/\${NAMESPACE}/artifacts/v1/drivers |
CPDAUTHURL | \${CPDURL}/icp4d-api/v1/authorize |
USERID | admin |
PASSWORD | xxx |
実行環境のシェルがbashでcurlコマンドとjqコマンドが導入されている場合、以下を実行するとBEARER
環境変数にBearer Tokenがセットされる。
CPDURL=https://cpd-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud
NAMESPACE=cpd-instance
DRIVERSURL=${CPDURL}/cognosanalytics/${NAMESPACE}/artifacts/v1/drivers
CPDAUTHURL=${CPDURL}/icp4d-api/v1/authorize
USERID=admin
PASSWORD=xxx
BEARER=$(curl -s -k -X POST -H 'Content-Type: application/json' -d "{ \"username\":\"${USERID}\", \"password\":\"${PASSWORD}\" }" "$CPDAUTHURL" | jq -r '. | .token')
jqが導入されていない場合、上記で述べた環境変数をセットしたあと、以下を実行する。
$ curl -s -k -X POST -H 'Content-Type: application/json' -d "{ \"username\":\"${USERID}\", \"password\":\"${PASSWORD}\" }" "$CPDAUTHURL"
{"_messageCode_":"200","message":"Success","token":"eyJhbGciOiJSUzI1..."}
上記、"token"キーの値がBearer Tokenなので、この値をBEARER
環境変数にセットする。
BEARER
環境変数の値をセットしたら、最初に、登録されているJDBCドライバーのリストを取得してみる。
$ curl -k -X GET "${DRIVERSURL}" -H "Content-Type:application/json" -H "Authorization: Bearer $BEARER"
[]
最初は何も登録されてないので空の配列[]
が返ってくる。
次に、JDBCドライバー・ファイルを登録してみる。presto-jdbc-0.284.jar
ファイルのあるディレクトリに移動し、以下のコマンドを実行する。
$ curl -k -X POST "${DRIVERSURL}" -H "Authorization: Bearer $BEARER" -F "files=@./presto-jdbc-0.284.jar"
結果として、登録に成功すると以下のようなJSONデータが返ってくる。
(見やすいようにjqコマンドで整形した)
{
"id": "41bd7e7671aab30b22ecac5e3be6eeb3636ca2f3676d41c44d5c8e99b1d44873",
"driverFileNames": [
{
"filename": "presto-jdbc-0.284.jar",
"fileid": "469a9489ea7e8588d1e08d6a56aa2a0022c41a905adc34e48d928b8cf4f2afb9"
}
],
"driverVersion": "",
"targetDatabase": "",
"createdAt": 1699974214
}
再度、登録されているJDBCドライバーのリストを取得してみる。
$ curl -k -X GET "${DRIVERSURL}" -H "Content-Type:application/json" -H "Authorization: Bearer $BEARER"
結果として、以下のように配列の中に上記の登録情報がセットされて返ってくる。
(こちらも見やすいようにjqコマンドを使って整形した)
[
{
"id": "41bd7e7671aab30b22ecac5e3be6eeb3636ca2f3676d41c44d5c8e99b1d44873",
"driverFileNames": [
{
"filename": "presto-jdbc-0.284.jar",
"fileid": "469a9489ea7e8588d1e08d6a56aa2a0022c41a905adc34e48d928b8cf4f2afb9"
}
],
"driverVersion": "",
"targetDatabase": "",
"createdAt": 1699974214
}
]
最後に、JDBCドライバーの登録を反映させるためにCognosを再起動する。
以下を実行する。
oc project ${NAMESPACE}
ARTIFACTS_POD=$(oc get pods | grep artifacts | awk '{print $1}')
CA_INSTANCE=$(echo $ARTIFACTS_POD | awk -F '-' '{print $1}')
oc delete pod $(oc get pod | grep $CA_INSTANCE | grep ca-cpd-rest | awk '{print $1}')
oc delete pod $(oc get pod | grep $CA_INSTANCE | grep ca-cpd-reporting | awk '{print $1}')
oc delete pod $(oc get pod | grep $CA_INSTANCE | grep ca-cpd-smarts | awk '{print $1}')
上記のコマンドを実行したら、CP4Dのインスタンス
画面で、Cognosが起動するのを待つ。
(Cognosの状況が他のものと同じアイコンになったらOK)
3. Cognosにwatsonx.dataとの接続設定を行う
Cognos Analytics with Watsonのホーム画面の左上メニューから、管理
> データ・サーバー接続 - 接続の作成と管理
を選択する。
右側にあるデータ・サーバーの作成
ボタンをクリックする。
以下の値を入力して、次へ
をクリックする。
項目 | 値 |
---|---|
名前 | watsonx_data (任意の名前) |
接続タイプ | Presto |
次に、以下の値を入力する。(JDBC URLのホスト名は実際の値に合わせる)
項目 | 値 |
---|---|
JDBC URL | jdbc:presto://ibm-lh-lakehouse-presto-01-presto-svc-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud:443 |
ドライバー・クラス名 | com.facebook.presto.jdbc.PrestoDriver (io.prestosql.jdbc.PrestoDriverにセットされているので変更する) |
接続プロパティ | SSL=true |
分離レベル | デフォルトのままで良い(変えても良い) |
認証 | サインオンを使用する |
今回、認証は毎回入力するのが面倒なのでサインオンを使用する
を選択した。その場合、その下にあるサインオンの追加
をクリックして、ユーザーIDとパスワードをセットし、最後に完了
をクリックする。
画面下部にある接続のテスト
ボタンをクリックして、テスト接続してみる。
接続が成功すると、以下のようにテスト接続は成功しました
が表示される。
接続が成功したら、次へ
をクリックする。
以下の設定はデフォルトのままにして、作成する
をクリックする。
結果として、データ・サーバー設定が登録され、以下のようにリストされる。
4. Cognosに分析するテーブルが含まれるスキーマをインポートする
データ・サーバー接続
画面にリストされたwatsonx_data
をクリックする。
以下の画面に遷移するので、次に、右側のメニューを表示させアセット
をクリックする。
検索フィールドにicos
と入力すると以下の2つの資産
がリストされる。
今回、icos1/hr
スキーマにあるhr_training
テーブルのデータを分析するので、icos1/hr
の右側にあるロード
をクリックする。
ステータス
がロード終了
になったら完了
をクリックする。
5. Cognosにコンテンツを追加する
左上メニューからコンテンツ
を選択する。
次に、個人用コンテンツ
タブを選択し、右上の新規
メニューからデータ・モジュール
をクリックする。
ソースの選択
の左メニューから をクリックすると、watsonx_data
がリストされるので、それをクリックする。
リストされているicos1/hr
を選択し、OK
ボタンをクリックする。
左のリストからhr_training
を選択し、画面上部左の (保存)をクリックする。
名前
にhr_training
を入力し、個人用コンテンツ
タブを選択し、保存
をクリックする。
6. Cognosのダッシュボードを作成してデータを分析する
以下のURLを参照した。
左上のメニューから+ 新規
> ダッシュボード
をクリックする。
4等分されたペインを選択し作成
をクリックする。
ソースの選択
をクリックする。
個人用コンテンツ
タブでhr_training
を選択し、追加
ボタンをクリックする。
結果として、以下のような画面になる。
department
を左上のペインにドラッグし、
ペインに表示される正方形の上にドロップする。
結果として以下のようになる。
externalhires
をドラッグして、department
のリストのヘッダーあたりにドロップする。そうすると以下のようなグラフ表示に変わる。
上記のグラフ領域の枠あたりのスペースをクリックすると、上部に以下のようなツールバーが表示される。
(視覚化の変更) アイコンをクリックして、表示形式を変えてみる。
(パック・バブル) アイコンを選択してみる。
そうすると、グラフが以下のような画面に変わる。
左側のメニューで、 (視覚化) をクリックし、リストからツリー・マップ
をクリックする。
結果として、空のツリー・マップ
が空のデータ・フィールドに作成される。
選択されたソース
からorganization
を右側の上部にある領域の階層
フィールドにドラッグ&ドロップする。
coursecost
をその下にあるサイズ
フィールドにドラッグ&ドロップする。
凡例を非表示にして、ツリー・マップのスペースを広げてみる。
右上のプロパティー
をクリックして表示されたプロパティー画面で、凡例
を展開して、凡例の表示
トグルを選択解除する。
coursedays
をフィルターに追加してみる。
選択されたソース
からcoursedays
をこのタブ
フィルター領域にドラッグ&ドロップする。
値の範囲を1から15として完了
ボタンをクリックする。
以下のような画面となる。
左ペインのdepartment
のパック・バブル
で、Finance
をクリックしてみる。
そうすると、右のペインのorganization
も、それぞれFinance
の情報のみになる。
organization
とdepartment
の関係を見るために、watsonx.dataの照会ワークスペース
(SQL)、または、Presto CLIで以下のSQL文を発行してみる。(以下は、Presto CLIを使用してやってみた結果を、一部省略して記載している)
以下のように、複数のorganization
があり、それぞれのorganization
が複数のdepartment
で構成されていることがわかる。
$ ./presto --server https://ibm-lh-lakehouse-presto-01-presto-svc-cpd-instance.mycluster-jp-tok-1-bx2-16-309ee4c04392c50ffd16fd0a4c2688e1-0000.jp-tok.containers.appdomain.cloud --user admin --password
Password:
presto> select organization, count(*) from icos1.hr.hr_training group by organization order by organization;
organization | _col1
-------------------------------+-------
GO Accessories corporate | 116
GO Accessories operations | 52
GO Americas corporate | 124
GO Americas operations | 60
GO Asia Pacific corporate | 116
GO Asia Pacific operations | 60
GO Central Europe corporate | 116
GO Central Europe operations | 64
GO Northern Europe corporate | 116
GO Northern Europe operations | 60
GO Southern Europe corporate | 116
GO Southern Europe operations | 56
(12 rows)
presto> select organization, department, count(*) from icos1.hr.hr_training group by organization,department order by organization,department;
organization | department | _col2
-------------------------------+-------------------------------------+-------
GO Accessories corporate | Executive Offices | 4
GO Accessories corporate | Finance | 36
GO Accessories corporate | Human Resources | 16
...
GO Americas corporate | Executive Offices | 12
GO Americas corporate | Finance | 36
GO Americas corporate | Human Resources | 16
...
Cognosで、画面上部左の (保存) をクリックしてダッシュボードを保存する。
適当な名前を付けて個人用コンテンツ
タブを選択し、保存
をクリックする。
ホーム画面に戻って、左上メニューからコンテンツ
を選択する。
さらに、最初のダッシュボード
(ダッシュボードを保存した名前)を選択し、詳細表示
から開く
を選択する。
そうすると、先ほど作成したダッシュボードが開き、データを分析することができる。