[OCI] 分析ツールOracle Analytics Cloud(OAC)からMySQL Database Service(MDS)に接続してデータをビジュアライズしてみる


# はじめに

Oracle Cloud(OCI)の高機能な分析ツール Oracle Analytics Cloud(OAC)からMySQL Database Cloud Service(MDS)へ接続して、データの取り込みから簡単なデータ分析までの一連の流れをひととおり試してみます。

# お試し環境

パブリック・サブネットのOACからプライベート・サブネットのMDSに接続するには、OAC作成時に設定するプライベート・アクセス・チャネルを経由して接続します。(下図)
![image-20220114095406640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a8275728-7819-cc2f-6830-ee5ca0a4da0a.png)
## 手順

1. MDSの作成 
   - ホスト名の指定
   - データの準備
2. OACの作成
   - プライベート・アクセス・チャネルの構成
3. OACからMDSへの接続
   - データの表示、及び分析

## 前提

- 踏み台サーバーは準備済み、またMySQL Shellもインストール済みです。

- HeatWave用のMDSを作成しますが、データ量がさほど多くないので今回はHeatWaveクラスタは構成しません。サンプルデータをMDSに投入して接続とデータの表示、分析までの流れを試みます。
- HeatWaveクラスタへの切替や性能については以下も参考にしてみてください。
  [[OCI] MySQLデータベースサービス(MDS) HeatWaveの性能比較テストをやってみた](https://qiita.com/cocotaro0202/items/3f1f325a3ec3c997b916)

- OACのデータ分析操作については本稿では含みません。

  

# 1. MDS(HeatWave用)の作成



## MDSの作成

OCIにサインイン後、左上のナビゲーションメニューから[データベース]-[MySQL]を選択し、**MySQL DBシステムの作成** をクリックします。
![image-20220117111215136.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/d005e4b8-8b6f-56c5-1012-14699367e93e.png)
**[コンパートメントに作成]** 任意のコンパートメントを指定します。
**[名前]** 任意の名前を指定します。例）mds-heatwave4oac
**[HeatWave]** HeatWaveを選択します。
管理者資格証明の作成
**[ユーザー名]** adminとします。
**[パスワード]** 任意のパスワードを指定します。
![image-20220117111405284.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/028a94f8-dbbb-6836-6e8c-7f2000c9c02f.png)
ネットワーキングの構成
**[仮想クラウド・ネットワーク]** 既存の仮想クラウド・ネットワークを選択。例）osaka-vcn
**[サブネット]** プライベート・サブネットを選択します。
![image-20220117111533962.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a298520e-4fe1-4a5f-0e89-3087882f57bf.png)
ハードウェアの構成、バックアッププランの構成はデフォルト値のまま進めます。

[拡張オプションの表示]をクリックし[構成]を表示し、[構成の選択]をクリックします。
![image-20220117172833931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/66c005ba-13e6-88d0-5046-4f9d7a040e94.png)
構成から MySQL HeatWave.VM.Standard.E3.Standalone を選択し、 [構成の選択]をクリックします。
![image-20220117111954212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/22b56b2e-e202-1b36-176e-7c7d61346b44.png)
構成が選択されました。
![image-20220117112050549.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/63aeb54e-0998-8822-fa52-456c9c82a0a0.png)

## ホスト名の指定

続いて、[ネットワーキング]OACタブに切替えて、ホスト名を入力します。
**※ OACからMDSに接続する際には、内部FQDN(ホスト名)が必要です。必ずホスト名を入力してください。**
![image-20220117112134927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/ff20ae2b-1109-5a63-53f4-14637cc4a064.png)
ここまで設定したら[作成]をクリックしMDSを作成します。約７～８分後にMDSがされました。
![image-20220117112332482.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/c9b30003-fdcd-800d-65c2-4f66dce36948.png)
詳細画面のエンドポイントの内部FQDNの表示、または[リソース]のエンドポイントにホスト名が表示されているかを確認してください。OACから接続する際にホスト名を使います。
![image-20220117112634639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/dd55c6ff-54a9-01c2-534b-901ccbefc961.png)

## データの準備
続いてMDSにOACのためのサンプルデータを準備します。データは巻末のLab.08のガイドにそってハンズオン用のサンプルデータを使います。

踏み台サーバーにtmpディレクトリを用意し、tmpにサンプルデータをダウンロードします。

```
[opc@bastion01]$ cd tmp
[opc@bastion01 tmp]$ wget https://objectstorage.ap-osaka-1.oraclecloud.com/p/2b0vXZXLx4M4dBREKIAt77EpkGls9KqNb-YGBZg0r0EkDMd-5eL2MCNTHLEKP-Td/n/idazzjlcjqzj/b/workshop/o/oac_hands_on.zip
```



サンプルデータ(oac_hands_on.zip)がダウンロードされたことを確認し、解凍します。

```
[opc@bastion01 tmp]$ ls
oac_hands_on.zip
[opc@bastion01 tmp]$ unzip oac_hands_on.zip
Archive:  oac_hands_on.zip
 extracting: check_heatwave.sql
 extracting: dbuser01_offload.sql
   creating: oac_hands_on/
  inflating: oac_hands_on/@.done.json
  inflating: oac_hands_on/@.json
  inflating: oac_hands_on/@.manifest.json
  inflating: oac_hands_on/@.post.sql
  inflating: oac_hands_on/@.sql
  inflating: oac_hands_on/dbuser01.json
  inflating: oac_hands_on/dbuser01.sql
  inflating: oac_hands_on/dbuser01@CUSTOMER.json
  inflating: oac_hands_on/dbuser01@CUSTOMER.sql
  inflating: oac_hands_on/dbuser01@CUSTOMER@@0.tsv.zst
  inflating: oac_hands_on/dbuser01@CUSTOMER@@0.tsv.zst.idx
  inflating: oac_hands_on/dbuser01@RFM.json
  inflating: oac_hands_on/dbuser01@RFM.sql
  inflating: oac_hands_on/dbuser01@RFM@@0.tsv.zst
  inflating: oac_hands_on/dbuser01@RFM@@0.tsv.zst.idx
```



踏み台サーバーでMysql Shell を実行しMDSに接続します。

```
[opc@bastion01 tmp]$ mysqlsh --mysql admin@mds-hw4oac.sub03060550521.osakavcn.oraclevcn.com
```



MySQL ShellでMDSにデータが格納できるかドライランさせて確認します。

```
MySQL ssl JS > util.loadDump("/home/opc/tmp/oac_hands_on", {dryRun: true, resetProgress:true, ignoreVersion:true})
[実行ログ]
Loading DDL and Data from '/home/opc/tmp/oac_hands_on' using 4 threads.
Opening dump...
dryRun enabled, no changes will be made.
Target is MySQL 8.0.27-u3-cloud (MySQL Database Service). Dump was produced from MySQL 8.0.27-cloud
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL script for schema `dbuser01`
[Worker003] Executing DDL script for `dbuser01`.`CUSTOMER`
[Worker003] Executing DDL script for `dbuser01`.`RFM`
Executing common postamble SQL

No data loaded.
0 warnings were reported during the load.
```



ドライランが問題なく実行できたので、実際にMDSへデータをロードします。

```
MySQL  ssl  JS > util.loadDump("/home/opc/tmp/oac_hands_on", {dryRun: false, resetProgress:true, ignoreVersion:true})
[実行ログ]
Loading DDL and Data from '/home/opc/tmp/oac_hands_on' using 4 threads.
Opening dump...
Target is MySQL 8.0.27-u3-cloud (MySQL Database Service). Dump was produced from MySQL 8.0.27-cloud
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL script for schema `dbuser01`
[Worker003] Executing DDL script for `dbuser01`.`CUSTOMER`
[Worker002] Executing DDL script for `dbuser01`.`RFM`
[Worker000] dbuser01@RFM@@0.tsv.zst: Records: 7437  Deleted: 0  Skipped: 0  Warnings: 0
[Worker001] dbuser01@CUSTOMER@@0.tsv.zst: Records: 7437  Deleted: 0  Skipped: 0  Warnings: 0
Executing common postamble SQL

2 chunks (14.87K rows, 1.45 MB) for 2 tables in 1 schemas were loaded in 1 sec (avg throughput 1.45 MB/s)
0 warnings were reported during the load. 
```



MySQL Shell をSQLモードに切り替えて、サンプルデータがロードされたことを確認します。

```
MySQL ssl  JS > \sql
Switching to SQL mode... Commands end with ;
MySQL ssl  SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| dbuser01           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.0006 sec)
```

新たにdbuser01というデータベースがロードされました。



```
MySQL ssl  SQL > use dbuser01;
Default schema set to `dbuser01`.
Fetching table and column names from `dbuser01` for auto-completion... Press ^C to stop.
MySQL ssl  dbuser01  SQL > show tables;
+--------------------+
| Tables_in_dbuser01 |
+--------------------+
| CUSTOMER           |
| RFM                |
+--------------------+
2 rows in set (0.0011 sec)
```

dbuer01 には、CUSTOMERテーブル(顧客属性情報)とRFMテーブル(購買履歴情報)が含まれています。



# 2. OACの作成

左上のナビゲーションメニューから[アナリティックスとAI]-[アナリティックス・クラウド]を選択し、**インスタンスの作成** をクリックします。
![image-20220118104850222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/1ee9dec3-2aed-c08c-09fd-4e8082320807.png)
**[名前]** 任意の名前を指定します。例)OAC01
**[コンパートメントに作成]** 任意のコンパートメントを指定します。
機能
**[機能セット]** **Enterprise Analytics** を選択します。 
**[容量]** **OCPU 1(非本番)** を選択します。

続いて、[拡張オプションの表示]をクリックします。ネットワーク・アクセスはパブリックを選択し、OACをパブリック・サブネットに配備しインターネット経由でアクセス可能にします。
![image-20220118104952262.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/5fa09dd3-ef4f-5d13-37cb-467c01a1e241.png)
**[作成]** をクリックしOACインスタンスを作成します。11分30秒後にOACインスタンスが作成されました。
![image-20220118105059488.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/5f0e8641-8657-91be-1661-ec24ad52f5be.png)

## プライベート・アクセス・チャネル
リソースのプライベート・アクセス・チャネルを選択し、**プライベート・アクセス・チャネルの構成** をクリックします。
![image-20220118105138328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4b850bb4-db5f-2552-4119-a10eb199a839.png)
プライベート・アクセス・チャネルの構成をおこないます。
![image-20220118161616521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/5440fb48-7ef0-cee9-7e23-7d0d58309cb8.png)
**[名前]** 任意の名前を指定します。例) Access4HeatWave
**[仮想クラウド・ネットワーク]** 仮想クラウド・ネットワーク(VCN)を選択します。例) osaka-vcn
**[サブネット]** プライベート・サブネットを選択します。
**[DNSゾーン]** "DNSゾーンとしての仮想クラウド・ネットワークのドメイン名" をチェックを確認します。

**[構成]** をクリックして、プライベート・アクセス・チャネルの構成を実行します。
**※ プライベート・アクセス・チャネルの構成が完了するまでに、下記のログからわかるように約１時間20分を要しました。構成が完了するまで気長に待ちましょう。**
![image-20220118105400864.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/68477fab-b61b-3dce-b039-4efa3807f176.png)

# 3. OACからMDSへ接続
MDSへサンプルデータを投入でき、OACもインスタンスを作成しプライベート・アクセス・チャネルも構成できたので、OACからMDSへの接続を試みます。

## OACの起動

OACの起動は、**[分析ホームページ]**をクリックするか、またはアクセス情報のURLをコピーしてブラウザから起動するかどちらも可能です。ここでは**[分析ホームページ]**をクリックしてOACを起動します。
![image-20220118163633196.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/0fbcdbf3-1616-e19a-9e42-f5824c470100.png)
OACが起動されました。
![image-20220118163357935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/e45906bf-6584-1ca5-5cf6-81ea6e21efda.png)

## 接続の作成

OAC右上の**作成**をクリックし、**接続**を選択します。接続タイプを求められるので、接続先リストの中から**MySQL**を選択します。
![image-20220126133322695.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/e3cb5fcc-809a-0a80-e1b9-aeab67c067b5.png)
MySQL(MDS)へ接続するための情報を入力します。
![image-20220117132223265.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/b4967ab4-a836-7e71-4822-6fc83707fb2c.png)
**[接続名]** 任意の接続名を指定 例) mdshw-connection01
**[説明]** 任意の説明を指定
**[ホスト]** MDSを作成した際のホスト名(内部FQDN)を指定します。例) mds-hw4oac.sub03060550521.osakavcn.oraclevcn.com
**[ポート]** MDSのポートを指定します。例) 3306
**[データベース名]** データベース名を指定します。例) dbuser01
**[ユーザー名]** ユーザー名を指定します。例) admin
**[パスワード]** パスワードを指定します。

**保存**して接続します。

## データ表示
接続に成功すると、次の画面が表示されます。サンプルデータベース dbuser01 を選択し拡大すると、CUSTOMER, RFM 各テーブルが表示されます。
![image-20220117132135928.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/0b3f9a25-6c2e-d259-2215-692b77d587b5.png)
カスタマーをホワイトスペースのガイドに従い、CUSTOMERテーブルをドラッグ・アンド・ドロップ、またはダブルクリックすると、CUSTOMERテーブルの中身を参照することができました。
![image-20220125160138340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/f8e6f8ab-82f4-6079-1f15-9f8c86eaa9b9.png)
以上、OACからMDSへの接続が確認できました。

## 参考）OACの分析ハンズオン
ここまで準備したサンプルデータを使って、巻末の参考URLの「Oracle Analytics Cloud オンライン ハンズオン セミナー動画」の説明にそってOACの分析操作を進めれば、以下のようなビジュアライズされた分析結果を表示することも可能です。この例では、以下を示しています。興味のある方は続けて操作してみてください。

- 都道府県別の購買金額
- 都道府県別の購買金額平均(高い順にソート)
![image-20220125173727657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/0f300fcc-b5a7-23c5-0469-2e3bce1c0ecc.png)

# 参考URL

[Lab 08: OAC用のサンプルデータをMDS及びHeatWaveにロードする。Oracle Analytics Cloud(OAC) を構成して、OACからMDS for HeatWaveに接続する。](https://github.com/YoshiakiYamasaki/mysql-heatwave-workshop_jp/tree/main/Lab08) 

[Oracle Analytics Cloud オンライン ハンズオン セミナー動画](https://videohub.oracle.com/playlist/details/1_xxi3uejh/categoryId/228666053) 

[[OCI]プライベート・アクセス・チャネルを使用してOracle Analytics CloudからMySQL DBシステムに接続してみた](https://qiita.com/500InternalServerError/items/5b5edb6fb3da073f29c1)