Cloud Pak for DataでGoogle Big Query上のテーブルを仮想化してアクセス

Cloud Pak for Data(CP4D) は IBMの統合データプラットフォームです。Openshift上に導入するSW版とIBM Cloud上のSaaS版があります。
それぞれの機能はSW阪の方が若干機能が豊富で、SaaS版の方が後から追いつく感じです。

今回はOpenShift上に構築したCP4D v3.5を使ってGoogle Big Query上のテーブルを仮想化してアクセスする方法について説明します。
仮想化(Data Virtulization)は2021年7月7日現在SaaS版にも実装されていますが、残念ながら無料のLiteプランはなく、有料プランのみで使用できます。

#1. データ仮想化?
データ仮想化とは、CP4Dの代表的な機能で、データをコピーすることなく、データを提供できる機能です。たくさんのDBにあるいろいろテーブルを使って分析処理や機械学習をしたい場合、CP4Dでデータ仮想化すれば、CP4Dで仮想化サービスにアクセス可能なユーザーであれば、それぞれのDBへの接続設定を知らなくともデータにアクセスすることが可能です。

従来の方法であれば、データアクセス権をそれぞれのDB管理者に申請して接続情報をもらってデータを取得、あるいは抽出したCSVをもらう等の手間が必要でしたが、CP4Dの仮想化のデータソース管理者がまとめてデータソースを設定しておけば、CP4D内でアクセス管理が完結してしまいます。

またCP4Dで仮想化サービスにアクセス可能なユーザーであれば、外部のBIツールなどからでも、DB2のJDBC接続で仮想化データにアクセスが可能です。


仮想化できるDB（v3.5）: (2021/05/19現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/84cbccae-1f66-3204-8d67-7f252c95f655.png)

また、ここでは説明しませんがCP4D内のWatson Knowledge Catalogと連携することで、カタログ登録した情報を簡単にデータ仮想化機能でも利用したり、データマスキングなどのプライバシー設定を引き継いだりすることが可能です。

#2. Google BigQueryでのサービスアカウントの作成
今回は[サンドボックス](https://cloud.google.com/bigquery/docs/sandbox?hl=ja)を使って、以下のようなMEMBERというテーブルをデータセットS_CUSTOMERに作成してあります。このテーブルを仮想化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d3e62fa7-8a42-b04d-1aa4-a57e435e1505.png)

接続情報設定のため、サービスアカウントを作成します。すでにあるサービスアカウントを使用する場合は、この手順はスキップしてください。

###2-1. Google Cloud Consoleにログインし、画面左上にあるメニューより、「IAMと管理」→「サービスアカウント」クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/847f3142-3560-ffba-b7a1-0bc4a5ed5a18.png)

###2-2. 上部の「＋サービスアカウントを作成」 をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4ef92a04-287a-a9d3-baec-3f1d62daf3a8.png)

###2-3. サービスアカウントの詳細を記入
`サービス アカウント名`を入れ、「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/69b1031a-15df-02cc-f487-54655542dcc9.png)


###2-4. ロールを設定
「ロールの選択」から、`BigQuery 管理者`を選択し、「続行」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d9288f24-e9d2-a738-2ce7-028f54f36783.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d01f68f2-267a-102c-d0f0-3b11efb79826.png)

###2-4. 「完了」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f289e4a0-cac4-9740-24b0-9560fdd77272.png)


作成したサービスアカウントが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/bc85e5f0-8b0c-0a91-f979-95387c1f00b6.png)


###2-5. 作成したサービスアカウントの操作をクリック、「鍵を管理」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/53b89cf7-c50b-3737-a0ea-1f308f46bfac.png)

###2-6. 表示された画面で「鍵を追加」→「新しい鍵を作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a33dfadf-1d8f-899b-d920-67608f437bb8.png)

###2-7. キーのタイプ「JSON」のままで「作成」をクリック
その後、ファイル保存のダイアログが表示されるので、後から分かる場所に保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1c1e42d2-8895-694c-7dc9-6ad7d7cdfa20.png)

以上でGoogle Big Query側の操作は完了です。

#3. CP4D: 仮想化のデータソース設定
ここからはCP4Dで作業します。

###3.1. メニューから、「データ仮想化」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/7b3e69a8-5f4b-0c17-71c1-49453cf5ce19.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c2b0fc68-aba2-7cd5-a7ae-d874be41607b.png)

###3-2. 「データソース」の画面で「データ・ソースの追加」→「新規接続の作成」をクリックします。
プラットフォーム接続で定義済みの場合は「既存の接続を選択」でも定義可能ですが、ここでは説明しません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/bd47bda5-c552-5b8c-b313-1bc27185fd85.png)


もし、「データソース」の画面が表示されなかったら、タイトルの横の∨マークをクリックして、メニューを出して、「データソース」を選択します。
このメニューに「データソース」の表示がなければ、権限がありませんので、管理者に相談してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/5e5b070e-3447-a1f5-d6bd-a02cfab36dbd.png)

###3-3. 「新規接続」の画面で「Google BigQuery」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/bd056b2a-e9f2-f06a-1ca3-95da06a4a604.png)

###3-4. 「Google BigQuery への新規接続」の画面でデータ・ソースの情報を入力し後、「作成」をクリック。

- 名前：　任意の名前。　下の例では`Qiita BQ`
- 資格情報: 2-6でダウンロードしたファイルをエディタ等開いて表示し、その内容をコピペする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/00912d4e-b3c5-ad43-358e-9daeb12f1e0a.png)

###3-5. 「リモート・コネクターに追加 (オプション)」の画面では「スキップ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e87589cc-373a-cd78-95bb-79e25437a8bb.png)

接続が成功すれば、無事データソース一覧に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c9edf852-88eb-b494-44f6-e840d1e9c9f4.png)

#4.CP4D: Google Big Query上のテーブルを仮想化
ではいよいよCP4Dから Google Big Query上のテーブルを仮想化してアクセスしてみましょう!

「データ仮想化」の画面になっていない場合は、[「3-1. メニューからデータ仮想化を選びます」](#31-メニューからデータ仮想化を選びます)の手順で「データ仮想化」の画面にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/fdcadb8e-9e8f-6c14-e120-09e9221bbdf4.png)

###4-1. データ仮想化のメニューから、「仮想化」をクリック
データ仮想化のメニューはわかりにくいのですが、下記のようにページタイトル(ここでは`データ・ソース`)の右の`∨`マークをクリックして表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/991a269d-c700-8334-ac8a-cd845433ca6f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/6360802f-a9ac-0f64-b816-d23181c59197.png)

###4-2. 仮想化したいテーブルをチェックし、カートに追加
追加したデータソースからアクセス可能なテーブルが表示されています。
今回は1つしかありませんが、複数表示され見つからない場合は、データベースでフィルタリングしたり、検索窓にテーブル名を入れたりして絞って表示させましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3209fc01-2eec-5159-789e-3a93c0874ae7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/8be84509-f2e5-1159-8515-e3fbee2e3294.png)


またテーブル名の右端の目玉(?)マークをクリックすると表の内容がプレビューできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b36d153c-92e4-2527-0545-5410c20ccef9.png)

MEMBERというテーブルを仮想化したいので、チェックを入れ、「カートに追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/b0cad064-33aa-0af0-0a43-51f706fd4902.png)

###4-3. カートを表示
「カートの表示」をクリックし、カートを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e939e63e-b024-3557-a25d-3ba4719e89dd.png)

仮想化する表の名前、スキーマは変更可能です（今回は変更しません）。また右側の縦の・・・メニューから、プレビューしたり、列名を編集したり、表をカートから削除することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/00684e35-14ce-36fb-4a92-3e95b57d395b.png)

試しに「表の編集」をクリックしてみましょう。
列名は編集可能で、日本語の列名にも変更できます。
また列も選択可能で、不要な列はチェックを外すことで、仮想化後のテーブルからはずずことができます。
変更した場合は「適用」クリックしてください。
ここでは変更せず、「キャンセル」で閉じます(上の黒い方のキャンセルをクリックしてください)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/57c7b787-0617-66fc-3092-dd4d32f6bb6f.png)

###4-4. 仮想化の実行
「仮想化」をクリックして仮想化を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/4b3c1c5c-1af0-44a4-2d74-7487bb8a3958.png)

以下のような画面が表示され、成功しました！　「　自分の仮想化データを表示」をクリックして、確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a19505a1-7ae1-402d-0a21-4e5a2b34d452.png)

自分の仮想化データにテーブル名が表示されています。プレビューで見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/2e64960a-ff8e-89d2-efdd-3a5102f3e8f7.png)

Google Big Query上のテーブルがCP4Dで仮想化されアクセスできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ab4341fb-7e79-d40a-fe21-0fb4df5d80ff.png)

尚、この「自分の仮想化データ」の画面は、データ仮想化のメニューから、「自分の仮想化データ」をクリックすることで、表示可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/19ebdd9f-1e1a-4e0a-d7d2-745759b55c68.png)

1つのテーブルのみを参照するなら直でGoogle Big Queryにアクセスすればよいのでは？　と思うかもしれませんが、この仮想化したテーブルは、普通のDb2のテーブルと同じように、仮想化した他のテーブルとJOINしたビューを作成したり、そのJOINしたビューも含め、外部のBIツールからアクセス可能となります。
つまり、 仮想化すれば仮想化したテーブル同志、例えばGoogle Big Query上のテーブル、Db2のテーブル、Oracle　DBのテーブルなどを3つJOINしたりして参照することができます。

またCP4D内のカタログに載せたり、プロジェクトと共有することが可能なので、CP4DのユーザーIDとCP4Dの適切な権限があれば、Google Big Query上に権限がなくとも簡単にデータアクセスが可能となります。

#5.外部ツールからCP4D仮想化DBにアクセス
CP4D以外のツールからCP4D仮想化DBにアクセスしてみます。

###5-1. 権限の確認
仮想化した本人のIDを使わない場合は、、データ仮想化のメニューから、「ユーザー管理」をクリックして、「ユーザーの追加」からIDを追加してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/533ed352-796a-92c7-6977-a42850f6f6dc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/2c96b114-b537-0e79-043a-9ef35c6deca4.png)


###5-2. 接続情報の確認
CP4D仮想化DBへの接続情報は、データ仮想化のメニューから、「接続の詳細」をクリックして表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/84fe521f-5abb-f9d0-97b5-fdb0b13ddf1c.png)

右側にDb2としての接続情報が書いてありますので、Db2に接続可能なツールであれば接続してデータを参照することが可能です。(今回はSSLなしで接続します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/8a4a9720-195d-1fce-5c72-6c72c36dda33.png)


###5-3. 接続してみる
OSSのDB Tool [DBeaver](https://dbeaver.io/)から接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/024d1838-4e1a-c4f2-0be2-b7b3212e288b.png)

なぜかテーブル一覧が表示できませんでしたが、SQL実行はOKでした!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ebb4b01b-016d-1f3e-7124-2af31c816dce.png)

以上です。