Cloud SQLのインスタンス作成からTableau Desktopへの接続まで

# はじめに
今回は、下記の2点について記載していこうと思います。
1. 「Cloud SQL ※1」のMySQLにおけるインスタンス作成〜インポートによるテーブル作成
2. 1.と「Tableau Desktop ※2」の接続方法

※1 Google CloudのMySQL、PostgreSQL、SQL Server 向けのフルマネージドリレーショナルデータベースサービス

https://cloud.google.com/sql?hl=ja#section-5

※2 直感的なビジュアル分析が可能なBIツール

https://www.tableau.com/ja-jp/products/desktop


## 環境
MacBook Pro(M1チップ非搭載)
macOS Big Sur 11.7
phpmyadmin ４.９.３
Tableau Desktop 2022.4

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [データ取得・dumpファイル生成](#データ取得・dumpファイル生成)
1. [CloudSQLでのデータインポートによるテーブル作成](#cloudsqlでのデータインポートによるテーブル作成)
1. [CloudSQLとTableauDesktopの接続](#cloudsqlとtableaudesktopの接続)
1. [最後に](#最後に)

<!-- 各チャプター -->
# データ取得・dumpファイル生成
今回作成するテーブルのデータを取得します。既に使用したいデータが、手元にある場合はこのセクジョンについては最後のdumpファイル生成まで飛ばしてください。

## データ取得
今回は下記のデータを使用して実装していきます。

https://www.kaggle.com/datasets/heemalichaudhari/shopping

1. 対象ページにいき「Download」ボタンを押してzipファイルをダウンロードします。
1. ダウンロードしたzipファイルをunzip等で回答してCSVデータを入手してください。

## dumpファイル生成
Cloud SQLでデータをインポートする場合、下記の2パターンがあります。
①sqlファイルを読み込んでテーブルとデータをインポートする。
②事前にテーブルを作成しておき、csvでデータをインポートする。
今回は、テーブル作成とデータ格納が一気にできる①の方法で実装していきたいと考えているのでdumpファイル生成を行います。

dumpファイルの生成方法ですが、今回は手早く作成したいことと今後データが増えずに一定であることを加味してphpmyadminを利用してdumpファイルを生成します。phpmyadminにはGUI上でcsvをインポートしてテーブル作成を行い、それをエクスポートできる機能があるのでそちらの機能を使用して作成していきます。

https://www.phpmyadmin.net/

1. csvファイルをインポートしてテーブルを作成します。csvファイルの形式によって必要なオプションを変更してください。今回のデータの場合は、1行目がカラム名になっているので「The first line of the file contains」のオプションにチェックを入れます。
![スクリーンショット 2023-01-05 0.17.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/17903ebf-b3cd-2527-0f09-276345c4ae77.png)

2. 1で作成されたテーブルを選択して「export」タブを選択して、SQLを出力してください。
![スクリーンショット 2023-01-05 0.30.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/ae219aa9-9da2-1451-f061-cc7b2c8dd57a.png)

3. 出力されたSQLをコピーしてsqlファイルにコピーして保存してください。これをのちのセクションで使用します。
※デフォルトだとテーブル名が「TABLE」　「TABLE 1」等になっているので必要であれば「CREATE TABLE」の定義されているテーブル名を変更してください。

<a id="#CloudSQLでのデータインポートによるテーブル作成"></a>
# CloudSQLでのデータインポートによるテーブル作成
データインポートからCloudSQLでのテーブル作成を実施します。また既にGoogle Cloudのアカウントとプロジェクトは生成している想定で記載しています。また、**無料トライアル期間が終わっている場合は課金が生じます**のでご注意ください。

プロジェクトの作成方法は下記に記載があります。

https://cloud.google.com/resource-manager/docs/creating-managing-projects?hl=ja

## インスタンス作成
1. 「Cloud SQL」で検索してサービスのトップページを選択してください。
1. 「インスタンスを作成」を押し、データベースエンジンは「MySQL」を選択してください。
1. MySQLのインスタンスを作成します。条件によって内容を入力してください。今回は、仮実装なのでDevelopmentの構成で作成します。ゾーンの可用性もシングルゾーンにします。問題なければ「インスタンス作成」を選択してください。少し待つとインスタンスが生成されます。
![スクリーンショット 2023-01-05 0.59.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/83db2629-a5e6-115e-a3bc-62f58c0b1744.png)
![スクリーンショット 2023-01-05 1.01.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/9bb1e813-a357-96d3-45cc-8a1f0553987a.png)

## データベース作成
1. 左タブメニューから、「データベース」を選択します。
1. 「データベース作成」を選択してデータベース名等必要な情報を入力します。文字セットと照合は後で変更可能なので今回はデフォルトのままで作成します。![スクリーンショット 2023-01-05 1.23.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/0d91ce88-9f98-2855-e08b-cfc19d6723e9.png)


## Cloud StorageにSQLファイルをアップロード（事前準備）
インポート前にCloud Storageに前のセクションで作成したSQLファイルをアップロードしておく必要があります。
バケットの作成とアップロードについては下記のドキュメントをご参照ください。

https://cloud.google.com/storage/docs/creating-buckets?hl=ja

https://cloud.google.com/storage/docs/uploading-objects?hl=ja

## データインポートによるテーブル作成
1. 作成したインスタンスの「概要」タブのインポートを選択します。
1. ソースはCloud Storageにアップロードしたファイルを選択してください。ファイル形式は「SQL」で接続先は「データベース作成」で作成したデータベース名にしてください。入力が終わったら「インポート」を選択します。処理が完了するとテーブルが作成されます。確認はCloud Shellを利用すると簡単にできます。![スクリーンショット 2023-01-05 1.53.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/9385bfb6-441f-5539-8d89-72ba4b639c98.png)

<a id="#CloudSQLとTableauDesktopの接続"></a>
# CloudSQLとTableauDesktopの接続
Tableau DesktopにはCloud SQLとのコネクタがサポートされているのでそれを使用していきます。

## ドライバをインストール(ローカル)
事前に必要なドライバをローカルにインストールします。CloudSQLの場合は「iODBC ドライバーマネージャー」と「MySQL ODBC コネクタ」が必要になります。

https://www.tableau.com/ja-jp/support/drivers

1. iODBC ドライバーマネージャをインストールします。mxkozzz.dmgを選択してダウンロードします。

https://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/Downloads#Mac%20OS%20X

2.MySQL ODBCコネクタをインストールします。OSに合うものをインストールしてください。

https://dev.mysql.com/downloads/connector/odbc/

## Cloud SQLのネットワーク設定
Cloud SQLへローカルPCから接続できるように設定を行います。
1. 左タブメニューの「接続」を選択してください。
1. 「ネットワーキング」の「承認済みネットワーク」下部にある「ネットワーク」の追加を選択します。
1. 自身のグローバルネットワークアドレスを入力してください。確認くん等からご自身のIPアドレス(IPv4)を確認して入力を行い、「追加」を選択してください。

https://www.ugtop.com/spill.shtml

## CloudSQLとTableauDesktopの接続
1. Tableau Desktopを開いて「サーバーへ」→「その他」→「Cloud SQL」を選択してください。
1. 下記の表示が出てくるので必要な情報を入力してください。
- サーバー欄: 「Cloud SQL」のパブリックIPアドレス
- ポート: MySQLなので「3306」
- データベース: 後から選択できるのでデフォルトもしくは対象のデータベース名を入れてください。
- ユーザー名: rootもしくは作成したユーザー
- パスワード: ユーザーのパスワード

![スクリーンショット 2023-01-05 2.22.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/daf1a647-1d94-012b-da3c-3acb3a39add2.png)

3.接続したら可視化したいデータベース、テーブルを選択することで使用することができます。
![スクリーンショット 2023-01-05 2.31.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1549822/7d2072f6-34b5-d453-c8d2-2abe527ec065.png)

<a id="#最後に"></a>
# 最後に
今回は、Cloud SQLのインスタンス作成からTableau Desktop接続を一通り実装してみました。
Tableau Desktopにはコネクタがあるので比較的楽に実装ができました。

Bigqueryではなく、CloudSQLからBIツールを使用する機会もあると思うのでその際にお役に立てていただければ幸いです。

また認識違いがあればぜひご指摘をお願いします。