ちょっと話題の記事

Amazon Redshiftで使えるPostgreSQL管理ツールを幾つか試してみた

2014.01.06

新年あけましておめでとうございます!しんやです。今年もよろしくお願いしますと言う事で2014年1発目のエントリです。

本日1/6は仕事始め。社内での全体朝礼の後、社員皆で秋葉原の弊社から10分程歩き、神田明神へ参拝に行ってきました。

当初、10分程ちょちょい〜と歩いて、15分程軽くお参りしてそのまま帰ってくるのかな〜、という位のノリだったのですが、付近まで来てみると...予想以上の、想像以上の人の列!!

Kanda-Myohjin-01

列の最後尾は緩やかな坂の下まで続いておりました。そして鳥居の辺りからは一面びっしり人の波。

Kanda-Myohjin-01-2

Kanda-Myohjin-02

Kanda-Myohjin-03

Kanda-Myohjin-04

Kanda-Myohjin-05

参拝後は逆サイドから回って鳥居入り口まで戻り、来た道を帰って行ったのですが、正直ここまでの混雑、正直神田明神を甘く見てました...神田明神パネぇ!!

Kanda-Myohjin-06


さて、ここから本題。Amazon Redshiftにアクセス出来る専用ツールというものは無いですが、RedshiftはPostgreSQLのインタフェースで構成されているのでクラスタへの接続の際にPostgreSQLの管理ツールを使う事が出来ます。このエントリでは数あるPostgreSQLツールの中から幾つかピックアップし、接続可否等を確認してみたいと思います。

※ちなみにこのエントリは池内 孝啓(TwitterID:@iktakahiro)さんの下記スライド資料で展開されているGUIツールの紹介部分にインスパイアされ、自分でも実際に使ってみた系のエントリになります。

目次

参考情報

サンプルデータはAWS公式ドキュメントでも展開されている以下の情報を参考にしています。Redshiftでクラスタを構築し、所定のデータベースにusersテーブルを作成し、s3からデータをロード、簡単なSQLを実行するという手順です。

drop table users;
create table users(
	userid integer not null distkey sortkey,
	username char(8),
	firstname varchar(30),
	lastname varchar(30),
	city varchar(30),
	state char(2),
	email varchar(100),
	phone char(14),
	likesports boolean,
	liketheatre boolean,
	likeconcerts boolean,
	likejazz boolean,
	likeclassical boolean,
	likeopera boolean,
	likerock boolean,
	likevegas boolean,
	likebroadway boolean,
	likemusicals boolean);

copy users from 's3://<任意のリージョン>/tickit/allusers_pipe.txt'
CREDENTIALS 'aws_access_key_id=<AWSアクセスキーID>;aws_secret_access_key=<シークレットアクセスキー>'
delimiter '|';

select count(*) from users;
select users.userid, users.firstname, users.firstname, users.state from users;

※s3のリージョンはRedshiftクラスタを構築したリージョンと合わせる。

VPCにPublicサブネットを設け、Publicアクセス可能な形でRedshiftクラスタを構築します。以下の様な接続情報が用意出来ている過程で各種ツールを使ってみるという想定で進めます。

Identifier: cm-redshift
Endpoint: cm-redshift.xxxxxxxxxx.<region>.redshift.amazonaws.com
JDBC URL: jdbc:postgresql://cm-redshift.xxxxxxxxxx.<region>.redshift.amazonaws.com:5439/cmredshiftdb
Port: 5439
DB: cmredshiftdb
UserName: cmredshiftuser
Password: XXXXXXXXXXXXXXXXXX

psql

PostgreSQLのターミナル型フロントエンドツール。コマンドラインベースで利用します。

AWS EC2(Amazon Linux AMI)へのインストールはyumにて。

$ sudo yum install -y postgresql postgresql-server postgresql-libs
$ psql --version
psql (PostgreSQL) 9.2.6

接続&RedshiftのPostgreSQLバージョンを確認。

$ psql -h cm-redshift.xxxxxxxxxx.<region>.redshift.amazonaws.com -U cmredshiftuser -d cmredshiftdb -p 5439
ユーザ cmredshiftuser のパスワード: 
psql (9.2.6, サーバー 8.0.2)
注意: psql バージョン 9.2, サーバーバージョン 8.0.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL 接続 (暗号化方式: DHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します.

cmredshiftdb=# 
cmredshiftdb=# select version();
                                                         version                                                          
--------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.717 
(1 行)

s3からのロードを実行。ちゃんとロード出来てますね。

cmredshiftdb=# copy users from 's3://<bucketofregion>/tickit/allusers_pipe.txt'
CREDENTIALS 'aws_access_key_id=<AWSアクセスキーID>;aws_secret_access_key=<シークレットアクセスキー>'
delimiter '|';
INFO:  Load into table 'users' completed, 49990 record(s) loaded successfully.
COPY
cmredshiftdb=# select count(*) from users;
 count 
-------
 49990
(1 行)

SQL Workbench/J

AWSのRedshift公式ドキュメントでも言及のあるクライアントツール。

sqlworkbench

導入手順はこの辺を参考に。

この辺は過去エントリでも何度か実践してるので特に問題無いですね。

sqlworkbench-2

pgAdmin3

恐らくPostgreSQLを利用されている方々からすれば最も有名なGUIツールではないでしょうか。PostgreSQL公式で提供されているOSSクライアントツールです。

pgadmin3

こちらのツール、公式で提供されているだけあって使い勝手は良さげなのですが、最新バージョンを導入して接続を試みてみるとバージョンが新し過ぎて合わない模様。幾つかエラーメッセージが出た後、以下のようなダイアログが表示されてしまいました。

pgadmin3-2

がしかし、キーワードで調べてみるとバージョン違い(古い=PostgreSQLのバージョンに対応したpgAdmin3)であれば行けそうな情報が。

既存のツールをバージョン名を付加してリネームした上で、言及されているバージョンのツールを別途インストール。

pgadmin3-3

所定のパラメータを設定し、[OK]押下。

pgadmin3-4

無事繋がりました!所々で対応していないプロパティなどのエラーが出る時がありますが、ある程度の操作であれば問題無さそうです。

pgadmin3-5

Intellij IDEA(Ultimate Edition, Database Tools)

IDEとして最近非常に評価の高まっているこちらのIntelliJ IDEA。私も1年位前からIntelliJ IDEAを使うようになり、ライセンスもUltimate EditionのPersonalライセンスを購入して利用しています。

intellij-idea

Ultimate Edition(※有償)でサポートされているDatabase ToolsからもRedshiftクラスタに接続する事が出来ました。

[View]→[Tool Windows]→[Database]を選択、または画面右端にある[Database]のラベルをクリック。

intellij-idea-2

データソースの追加を行います。[Data Source]→[PostgreSQL]を選択。

intellij-idea-3

所定の接続情報を設定。JDBCライブラリに関する問題がある場合(ドライバが無い)、設定画面下部に以下の様にメッセージが表示されるので問題を解決出来る場合があります。

intellij-idea-6

intellij-idea-4

テスト接続を確認した後、接続へ。

intellij-idea-5

繋がりました!

intellij-idea-7

RazorSQL

RazorSQLはSQLクエリツール、データベースブラウザ、SQLエディターとデータベース管理ツールです。Windows、Mac OSX、LinuxとSolarisをサポートします。RazorSQLはJDBC或はODBCで接続して、既に30個以上のデータベースの動作確認済みです。

割と広範囲のDBに対応している様なので、試しに導入してみました。有償ツールで、30日間試用版が利用可能です。

razorsql

[Click to Connect to Database]をクリック。

razorsql-2

PostgreSQLを選択し、[Continue]をクリック。

razorsql-3

所定の情報を設定し、[CONNECT]をクリック。

razorsql-4

無事繋がりました!UIや使い勝手も悪く無さそうです。

razorsql-5

NaviCat

Windows版/Mac版及び各種RDBに対応した版も提供されている等、サービス毎にきめ細やかな対応が成されているNaviCat。何より日本語でサポートされているというのが心強いですね。ここではNaviCat for PostgreSQLを使ってみました。こちらも1ヶ月間の試用版で試してみています。

navicat

アーカイブをダウンロード&インストール。

navicat-2

ツールを起動し、所定の情報を入力します。

navicat-3

接続も問題無く行けました。

navicat-4

まとめ

以上、主だったデスクトップクライアントツールに関して、Redshiftへアクセス可能なPostgreSQL対応管理ツールを試してみました。(PostgreSQLに)完全準拠という訳では無いですが、従来使っていたツールがRedshiftに対してもそのまま使えるのであれば利用者としては助かりますね。他にもオススメのツールや新たに対応した(実は既に対応している)ものなどあれば、適宜当エントリに追記して行きたいと思います。