Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「Amazon Redshift」を使ってみた
~使いどころと、つまずきがちなポイント

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/07/10 14:00

 2013年6月から東京リージョンでも利用可能になったAmazon Redshift。本記事では、サービス開始当初からいち早く触れてきた筆者が、使ってみた印象、そしてその際につまずいた点などを紹介します。

目次

はじめに

 Amazon Redshiftは、Amazon Web Services(AWS)が提供するデータウェアハウス(DWH)サービスで、2013年2月に正式リリースされ、同6月4日には東京リージョンでも利用可能になりました。既存のDWHと比較しても安価で、PostgreSQLベースで容易に高速なデータ分析が可能であることなどが知られており、注目も高まっています。

 ところが、日本国内では「使ってみた」という情報は非常に少ないです。幸運にも筆者は、限定プレビューの段階からRedshiftに触れる機会に恵まれました。そこで、今回は「こんな使い方をしてみました」「こんなところでつまずいた」といったことを中心に紹介したいと思います。

 なお、本記事は限定プレビュー~サービス開始当初の米国東部リージョンでの使用結果を元に執筆しており、当時のAPIバージョンは2012-12-01です。東京リージョンでの動作を保証するものではありませんので、あらかじめご了承ください。

対象読者

  • Amazon EC2およびS3を使ったことのある方
  • PostgreSQLを使ってSQLを書ける方
  • AWSが提供する英語マニュアルを読める方

必要な環境

  • AWSアカウント

準備

 ではさっそくインスタンスを起動して始めましょう! ……と言いたいところではありますが、分析対象データは準備していますか? 分析によって得たい結果は明確になっていますか? インスタンスを起動する前に、きちんと準備をしておきましょう。

テーブル設計は大切

 まず、分析対象データがCOPYコマンドでロードできる形式(CSV、タブ区切りなど)になっているか確認しましょう。発行するCOPYコマンドも事前に作っておくと、作業がスムーズに進められます。

 データレイアウトが分かったら、ロードするテーブルのCREATE TABLE文を作っておきます。効率よく分析を行うためには、テーブル設計が非常に重要になってきます。クラスタ内のデータ配置が処理速度に影響しますので、データ型やdistkey, sortkeyなどは適切に選択しましょう。詳細は、AWSが提供する「Amazon Redshift Developer Guide」を参照してください。

注意事項1

 CREATE TABLE文において、列にtext型を指定すると、その列はVARCHAR(256)に変換されます。長い文字列を扱う場合は、最大文字列長に注意しましょう。

クエリの作成

 分析用のクエリも事前に作っておきましょう。Redshift SQLでは、PostgreSQLの中でもサポートされている関数が限定されています。

 特に筆者を悩ませたのは正規表現、シーケンス、row_number()がサポートされていない点です。正規表現はlength()、substring()、strpos()などの文字列関数を駆使するなど、記述に工夫が必要です。row_number()は、次のようにsum()を代用してrownum列を作成します。

select sum(1) over (order by colname rows unbounded preceding) as rownum, colname
  from tablename
 order by 1,2;

 ただし、数百億レコードのデータに対してrownumを付与すると、非常に時間がかかってしまいます。可能であれば、あらかじめロードするデータに付与しておくとよいでしょう。

 緯度経度情報を使った解析も、SQLを作って計算するのは手間がかかります。こちらも事前に計算しておくと、効率が良くなると思います。

 また、Redshiftは列指向型データベースなので、読み出す必要のない列はSQLに記述しないなどの工夫も必要です。

AWS環境の準備

 ここまで準備したら、ようやくAWSの出番です。筆者はRedshiftの他に、EC2とS3を利用しました。

Redshift

 データを分析するクラスタです。データ量に見合ったインスタンス、ノード数を選びます。セキュリティグループ設定で、クライアントとなるEC2インスタンスからのデータベースポート接続を許可します。

EC2

 ODBC経由でRedshiftにアクセスするクライアントです。PostgreSQLをインストールし、ここからRedshiftに対してpsqlコマンドを発行します。

 コマンドを発行して結果を受け取るだけなので、それほど高性能なインスタンスでなくても大丈夫です。また、ローカルPCからログインする場合は、セキュリティグループでSSHポートの接続許可が必要です。

S3

 Redshiftにロードするデータを置く場所です。分析対象データをS3のバケットにアップロードしておき、EC2からCOPYコマンドを実行してRedshiftにデータを投入します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5