Tableau Desktopから色々なデータソースに繋いでみる(Amazon RDS(MySQL)編)

2013.11.06

目次

 

はじめに

先日投下した以下エントリでもご紹介した様に、Tableau製品からは実に様々なデータソースへの接続に対応しています。テキストファイルからOffice製品、RDBMS、ビッグデータ周り...環境さえ用意すれば同じ様なインタフェースで接続に行けるのは嬉しいところですね。

今回のこのエントリは、下記イベント(初演&再演)での発表内容についてスライド資料よりもちょろっと詳しく、実践的な手順やコードを踏まえて進めて行く内容になっています。

このエントリではRDS(MySQL)について採り上げてみます。環境構築〜インスタンス作成〜SQLクライアント接続確認〜データ投入〜Tableauからの接続確認、という流れでどのように接続までに至るのかご紹介。

 

環境準備

まずはTableau経由での接続を行う為のAWS環境を用意します。今回想定しているAWS環境はこんな感じ。

tableau-to-rds-mysql

外部からAWS環境下のRDSに接続しに行く為に、RDSをPublic Subnetに配置しています。また、RDS自身もPublicly Accesssibleを有効な状態にしています。セキュリティグループはdefaultグループとポート:3306を有効にしたセキュリティグループを用意し、RDSに割り当てます。

まずはRDSを配備する為のAWS環境を準備しましょう。環境は以下の様なものを想定しています。外部(Tableau)から接続する為に、RDSはPublicly Accessible属性を有効にする必要があります。また、それら接続が可能となるようにPublic SubnetにRDSを配置するなどしています。

環境については、CloudFormationのテンプレートを用意致しました。AWSにログインした上で以下のリンクをクリックすると一発でVPC及び各種ネットワーク、セキュリティグループのスタックが立ち上がります。上記構成図で言うと、AWSインフラ内のRDS以外が整う形となります。CloudFormation、素敵♪(人∀`*) (※CIDRやネットワーク構成時に入れられそうな入力パラメータについては敢えて設定せず、構成図そのままの設定値で構成しておりますのでそこは悪しからず。)

Tableau接続デモ用構成(VPC&各種ネットワーク構成)起動

テンプレートを実行しスタック作成が完了すると、以下の様にOutput値に出力内容が並びます。

tableau-to-rds-mysql-02

 

RDS(MySQL)インスタンス作成

RDS作成の下地が整ったら、次はRDSインスタンスを作成します。この辺もCloudFormationで一発どーんと行きたかったのですが、CloudFormationではPublicly Accessibe属性の指定が出来なかったりしたのでここはノーマルに管理コンソール経由で作業。以下内容で粛々と起動。

  • DB識別子、ユーザー名、パスワード、DB名は任意の値を設定
  • ポート:3306(デフォルト)
  • AZ:ap-northeast-1a
  • VPCセキュリティグループ:VPCデフォルト(default)とMySQL接続用に用意したセキュリティグループ(xxxxxx-RDSMySQLSecurityGrou-xxxx)を併せて指定
  • Publicly Accessible:Yes

tableau-to-rds-mysql-03

生成処理が完了し、ステータスがavailableになったら次のステップ、接続確認に進みます。

tableau-to-rds-mysql-04

 

RDS(MySQL)クライアント接続確認

MySQLについての接続確認に用いるクライアントツールについては、ここでは『Sequel Pro』を使います。Mac OS X用のツールでとても使いやすいです。所定の接続情報を設定し、[接続]押下。

tableau-to-rds-mysql-05

無事AWS外部からAWS VPC内のRDS(MySQL)に接続出来ました!

tableau-to-rds-mysql-06

 

解析データの投入

当エントリで用いるデータは、以下サイトから入手します。

tableau-to-rds-mysql-07

落としてくるのは上記サイトの赤枠線内リンク、OlympicAthletes_0.xlsx。オリンピックのメダル数データになります。中身はこんな感じ。

tableau-to-rds-mysql-08

MySQLデータベースに取り込む為に、以下の様な加工を施します(.xlsx から .csvへ変換)。本来なら何か処理噛ますんですがここはまぁ手作業で。上記ではEXCELで開いてますが作業はLibreOffice on Mac OS Xにて実施しました。

  • 開く→名前を付けて保存:csv
  • エンコーディング:UTF-8
  • フィールド区切り:『,』
  • テキストの区切り: なし
  • 保存後先頭行削除

MySQLにログインし、以下のテーブルを作成。またテーブル作成に併せて前後の処理も一気に流します。DB再作成→テーブル作成→データロード→SQL検索確認まで行っています。

DROP DATABASE cmmysqldemo;
CREATE DATABASE cmmysqldemo CHARACTER SET utf8;

use cmmysqldemo;
CREATE TABLE medals (
    athlete VARCHAR(100) NOT NULL,
    age int(2) NOT NULL,
    country VARCHAR(100),
    year int(4),
    ceremony_date date,
    sport VARCHAR(100),
    gold_medals int(2),
    silver_medals int(2),
    bronze_medals int(2),
    total_medals int(2)
);

LOAD DATA LOACL INFILE '/Users/XXXXXXXXXXXXXXXX/tableau1106/OlympicAthletes_0-csv.csv'
INTO TABLE medals
FIELDS TERMINATED BY ',' ENCLOSED BY '';

SELECT * FROM medals;

tableau-to-rds-mysql-10

 

Tableau接続環境準備

ここからはTableau側の環境整備に入ります。まずは何は無くともTableau Desktopのインストール。以下からトライアル版(2週間)を入手し、実行してインストール作業を進めてください。

Tableau Desktopインストールが完了したら次はODBCドライバ。以下ドライバのページから対応するmsiファイル( mysql-connector-odbc-5.2.5-win32.msi)

を入手(32bit版)、インストール実施。この際特にコントロールパネルでの設定作業は要りませんでした。

tableau-to-rds-mysql-11

 

接続!

いよいよ接続です。Tableau Desktopを起動、データソースでMySQLを選択。ホスト名・ポート・ユーザー名・パスワードを設定して接続押下。するとその先に進めるので、サーバ上のデータベース選択、テーブル選択まで行って[OK]押下。

tableau-to-rds-mysql-13

接続開始!ここはライブで接続を選択(その名の通り、データに直接接続)。

tableau-to-rds-mysql-14

繋がりました!画面左側『ディメンション』と『メジャー』の欄に、データ列、項目名が列挙されてますね。

tableau-to-rds-mysql-15

データを操作してみました。国別、メダルの色別でまとめた棒グラフです。

tableau-to-rds-mysql-16

 

まとめ

と言うわけで、TableauからRDS(MySQL)環境に繋げて操作するまでの一連の流れについて1本書いてみました。Tableau(Desktop)からは様々なデータソースに接続が可能である事はこれまでも何度か言及していますが、この他にも興味深いプロダクトは沢山ありますので時期を見て環境構築を含めた(他の)データソースへの接続手順についてもエントリをUPして行きたいと思います。