AlteryxでRDSとCloud SQLに接続

# はじめに
Alteryxで、色々なデータソースとつないでみています。

https://qiita.com/a_b_/items/4c58e6bf7f4761273b36

https://qiita.com/a_b_/items/7c9243b5aa9ab6c7bbc2

今回はRDBサービスである、AWSのRDSと、GCPのCloud SQLとつなぎました。

# 概要
- 両方ともMySQLで試行
- ODBCを用いての接続なので、その点がちゃんとしていれば問題なく接続
- 出力オプションについては、いろいろあるので注意
    - 「気づかない間にフォーカスが当たっていて、マウスホイールを回して変更してしまう」という事故をやらないように…

# RDS
## 環境構築
以下をコンソールから作成します。
- VPC
- パブリックサブネット2つ
    - サブネットグループを作る際に2つ以上必要だったため
- セキュリティグループ
- サブネットグループ
- RDS
    - MySQL

以下を自PCにインストールしておきます。
- MySQLのODBCドライバ

### VPC
現在のコンソールからだと、サブネットも一緒に作ってくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/02a328ea-0ae0-0884-87b8-ea4c615f8576.png)
AZ2つで、パブリックサブネットも2つにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/34d53123-3793-2917-c487-7a5c14478a01.png)
他の設定はほぼデフォルトで、VPCを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/76e95c26-d9b5-0b6f-8a39-add5bd13d643.png)

### セキュリティグループ作成
インバウンドに、MySQLの通信を接続元のIPで許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/4f078425-d109-0bd1-a4ad-527dfb059558.png)

### サブネットグループ作成
RDSのコンソールから、先に作成された2つのサブネットを指定して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/88a63ec4-6858-96c6-8df1-e0a0f6c70126.png)

### RDS作成
MySQLを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/88f91019-49f4-9b47-902a-0985b8b79aba.png)
試用なので、単一のDBインスタンスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/3f6a47bf-b9b6-40b3-c8d8-349171a05d18.png)

インスタンスは最安価ので作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ee13ecc5-304f-8d6e-d2ae-b2502be49922.png)
ストレージも最小で。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/cae42da1-b036-1004-0eab-2f69cd03e646.png)
作成したVPCとサブネットグループを指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2ab3ffa9-976d-327f-365d-b83aecdfda3c.png)
自PCからのアクセスなのでパブリック接続とし、セキュリティグループも作成したものを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/9bad715f-06d8-6364-c003-e3780823dc6d.png)
接続はパスワード認証で。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/08ef2f8d-2b95-e206-f642-db6e27709c7f.png)
試用なのでいろいろOFFに。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/9808d90e-0337-eea9-ce18-2244d132a2e8.png)
CREATE DATABASEも、この時点で出来てしまうので、一緒に作ってもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/c6f280e8-a39c-aeda-f251-3d5204f75226.png)

### ODBCドライバ
以下のページを参考にインストールしました。

https://www.kkaneko.jp/cc/mysql/mysqlodbcvc.html

ダウンロードはアカウントを作らなくても、以下の箇所から可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/3e8ec31f-3252-0816-cf8e-d926c98992c1.png)

設定は以下のページを参考にしました。

https://a1-style.net/how-to-connect-to-aws-rds-mysql-from-windows-pc-odbc/

ドライバは二つ入っていたので、Unicode Driverの方を使いました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8e2aa47a-1c4e-f1a0-e66a-658aea57ab0f.png)


接続先のサーバはRDSのコンソールで確認できるものをセットし、User/PasswordとDatabaseも作成時のものをセットしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ab34490b-7157-c6f2-6dfb-82253246b18f.png)


### CREATE TABLE
以下のSQLでテーブルを作ります。
私はいつも、DBeaverを使っています。
```sql
CREATE TABLE alteryx.hoshiiro2_cast
(
	 話数	varchar(100)
	,パート	varchar(100)
	,ポプ子	varchar(100)
	,ピピ美	varchar(100)
)
```
以下のデータをあらかじめ入れておきます。
```
話数,パート,ポプ子,ピピ美
第1話,前半,平野綾,茅原実里
第1話,後半,井上和彦,堀川りょう
第2話,前半,朴璐美,釘宮理恵
第2話,後半,檜山修之,森川智之
```


## 入力
Alteryxでデータ入力ツールをドロップし、データ接続-データソースに、MySQLを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/cdceee39-89c4-ee1a-ac24-bd79f0c5c0e2.png)
先程作ったデータソースを選択し、ユーザ名とパスワードを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/0dab55a8-d823-7e12-5b09-309152f276a7.png)
ビジュアルクエリエディタで、クエリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/aaf93006-7e34-51ba-26f9-e78ecb50fb53.png)
閲覧ツールと繋げて実行し、取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8daf5111-4116-36e9-0a83-530c1d7e3ca4.png)


## 出力

以下のCSVをAlteryxで取り込みます。
```
話数,パート,ポプ子,ピピ美
第3話,前半,大谷育江,犬山イヌコ
第3話,後半,榎木淳弥,内田雄馬
```

出力ツールをドロップし、データソースにMySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/854d934a-81d4-6069-c9f4-f71bf1a3738b.png)


入力と同じようにODBCの設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/61010f5a-dba0-8927-cf26-b97ad81f0d34.png)
テーブル名の指定が求められます。作成したテーブルを指定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/07470f71-cee3-499b-38b1-c08906dfecf4.png)
出力オプションを指定。「既存のものを付加する」で試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ac7c65d5-046c-1922-9ffc-8c694fb3fd2f.png)
Alteryxで取り込んだデータが追加されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/41e09553-3c46-973b-bbda-2f85471c4c8d.png)

出力オプションを別のものにして再実行してみます。「データを削除して付加する」で実行しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2146ed51-2cba-54c9-41d6-4c98ad734fc5.png)
既に入っていたものは無くなって、取り込みデータが入りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ed9001f9-02e5-177e-de44-195dc8e8e460.png)
既にテーブルがある状態で「新しいテーブルを作成する」のオプションで実行するとエラーになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/838ce81c-315c-07cb-2611-de03b6db3384.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d34a18ef-1ee1-5989-7243-748cccd94179.png)
テーブルを上書きしてみると、定義が変わりました。もともとvarchar(100)で作成していましたが、サイズが254になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ed60afef-9848-baea-388d-5aff60a53890.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/6b2221aa-c929-e007-510c-b57ce1fe1ba4.png)



# Cloud SQL

## 環境構築
こちらはCloud SQLだけの作成で問題ありません。ドライバはRDSの際にインストールしたものを使います。
### Cloud SQL
MySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/69ea49b6-b033-fb71-b059-5efe3275c03e.png)
インスタンスの情報等入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2efaa421-5d35-dcea-c55d-d0ccd12fbf52.png)
リージョンはシングルとしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8a9f8358-76af-9e0b-e4b0-35331e7be1d3.png)
インスタンスのカスタマイズは試用のため、なるべく安価にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f8bd671d-357c-e111-6d69-6b7e5ddd30e7.png)
接続　の箇所で、自IPのみ接続可能に設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8d15031f-cd78-ef0c-f18d-3328f642abf9.png)
試用なので、データの保護などはしません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/cd91591d-7e8b-a3c0-8855-163c16a5abdf.png)

作成後ですが、Cloud SQLはCloud Shellから接続できるよう準備されています。これを使って初期状態を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e1f6d312-44af-d642-a774-90b437261d0e.png)

CloudShellから以下コマンドで、データベース・テーブル・初期データを作ります。
```
CREATE DATABASE alteryx;

USE alteryx;

CREATE TABLE alteryx.hoshiiro2_cast
(
	 `話数`	varchar(100)
	,`パート`	varchar(100)
	,`ポプ子`	varchar(100)
	,`ピピ美`	varchar(100)
);

INSERT INTO alteryx.hoshiiro2_cast VALUES
('第1話','前半','平野綾','茅原実里'),
('第1話','後半','井上和彦','堀川りょう'),
('第2話','前半','朴璐美','釘宮理恵'),
('第2話','後半','檜山修之','森川智之')
;

SELECT * FROM alteryx.hoshiiro2_cast;
```

### ODBC設定
RDSと同じように、接続名でアクセスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ec3cc884-0938-a5e0-6f29-fd3b6652cebc.png)

## 入力
データ入力ツールから、データ接続-データソースでMySQLを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d3539946-1d68-ec7e-182e-e621dda63e0d.png)
ユーザ名とパスワードを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/930eb46a-f686-8387-0427-c92600d17931.png)
クエリエディタで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/54be3eaa-652f-66fa-64c6-22208e1fb3c1.png)
閲覧ツールと繋げて実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/5060fa99-5d5b-3cb3-bd63-1907620dd258.png)

## 出力
RDSと同じデータをAlteryx上に取り込みます。
データ出力ツールと繋げて、入力と同様、データソースにMySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/231287ed-dfb3-8628-b217-39b171a67c57.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/a57f3269-a674-42a4-a2b4-2cb4314c4f40.png)
同じように、ユーザ名とパスワードを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/19a95882-22c7-97af-293b-9380d8404394.png)
出力テーブル名を求められますので、作成済みのテーブル名を指定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/5c5d734e-acb5-15d8-e3ea-e7fb51a3ac0a.png)
RDSと同様に出力オプションがありますので、いくつか試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/85359f69-9489-93de-897a-c6b099a72054.png)
まずは「既存のものを付加する」から試します。
```
mysql> SELECT * FROM alteryx.hoshiiro2_cast;
+---------+-----------+--------------+-----------------+
| 話数    | パート    | ポプ子       | ピピ美          |
+---------+-----------+--------------+-----------------+
| 第1話   | 前半      | 平野綾       | 茅原実里        |
| 第1話   | 後半      | 井上和彦     | 堀川りょう      |
| 第2話   | 前半      | 朴璐美       | 釘宮理恵        |
| 第2話   | 後半      | 檜山修之     | 森川智之        |
| 第3話   | 前半      | 大谷育江     | 犬山イヌコ      |
| 第3話   | 後半      | 榎木淳弥     | 内田雄馬        |
+---------+-----------+--------------+-----------------+
```
追加されていました。
次は「データを削除して付加する」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/61b09f2f-f522-e710-d899-ad2253458d32.png)
Alteryx上に取り込んだデータだけになりました。
```
mysql> SELECT * FROM alteryx.hoshiiro2_cast;
+---------+-----------+--------------+-----------------+
| 話数    | パート    | ポプ子       | ピピ美          |
+---------+-----------+--------------+-----------------+
| 第3話   | 前半      | 大谷育江     | 犬山イヌコ      |
| 第3話   | 後半      | 榎木淳弥     | 内田雄馬        |
+---------+-----------+--------------+-----------------+
```
次は「テーブルを上書きする(ドロップ)」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ba26e2d1-b5ae-df22-1f09-0c4091258650.png)
データは新データのみ、テーブル定義は変わりました。
```
mysql> SELECT * FROM alteryx.hoshiiro2_cast;
+---------+-----------+--------------+-----------------+
| 話数    | パート    | ポプ子       | ピピ美          |
+---------+-----------+--------------+-----------------+
| 第3話   | 前半      | 大谷育江     | 犬山イヌコ      |
| 第3話   | 後半      | 榎木淳弥     | 内田雄馬        |
+---------+-----------+--------------+-----------------+
2 rows in set (0.04 sec)

mysql> show create table hoshiiro2_cast;
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table          | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hoshiiro2_cast | CREATE TABLE `hoshiiro2_cast` (
  `話数` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `パート` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ポプ子` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ピピ美` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci            |
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)
```
「新しいテーブルを作成する」も行いました。結果は（既にテーブルが存在するため）RDSと同様にエラーになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/becc0eaa-2441-1012-bc2e-b2278af7bf43.png)

# おわりに
今回はAlteryxで、RDBのPaaSであるAWSのRDSとCGPのCloud SQLにつないでみました。
ODBCドライバ経由なので特に問題なく接続できました。

使っていて注意した方がよいと思った点は冒頭のほうにも書きましたが、出力オプションがかなり危険なものにもかかわらず、容易に変更できる点です。
DBに対してではないですが、「気づかずマウスホイールで変更」->「元の状態覚えていない」->「End」ということを何度もしてしまった経験があるので、運用する際は細心の注意が必要と感じます。