SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

S3へのデータアップロード

 ファイルはタブ区切りテキストを1億レコード単位(数GB程度)に分割した後、gzip圧縮したものを転送しました。COPYコマンドのオプションで複数の圧縮ファイルを並列にRedshiftにロードできること、転送時間の節約が主な理由です。データ量が多いとアップロードにも時間がかかってしまいます。転送速度から、ある程度の転送時間を見積もっておくと良いでしょう。

注意事項2

 S3のバケットは、Redshiftと同じリージョンに作成しましょう。筆者は、S3バケットを東京リージョンに作成し、米国東部リージョンのRedshiftクラスタにデータをロードしようとして失敗しました。TB級のデータをS3にアップロードする時間を無駄にしないためにも、小さなデータセットをアップロードして、S3からRedshiftにデータロードできることを確認してから、分析対象データをS3にアップロードするのがよいでしょう。

S3からRedshiftへのデータロード

 EC2インスタンスにログインしたら、psqlを起動し、COPYコマンドでロードします。100MB未満のデータなら、数十秒でロードが完了します。筆者は1.5TBのデータセット(3カラム、約400億レコード)をロードするのに、約4時間かかりました。

Tips1:データロードの途中経過を確認する

 データロードが長時間におよぶ場合、ロード中に何レコードがテーブルに入っているか、途中経過を見たい場合があります。しかし、ロード中のテーブルに対してSELECT COUNT(*)を実行しても、なかなか結果が返ってきません。

 次のSQLで確認すると、tablenameというテーブルのレコード件数を比較的早く知ることができます(それでも7~8秒かかります)。

select trim(name) tablename, col, to_char(sum(num_values), '999,999,999,999') count 
  from SVV_DISKUSAGE 
 where name = 'tablename'
 group by name, col
 order by 1, 2;

分析

 あとはクエリを実行するだけです。クエリを書いたファイルをEC2インスタンスに置いて、psqlコマンドで実行して結果を待ちましょう。

 また、必要に応じて標準出力や標準エラー出力の結果をファイルに保存します。

$ (psql -a -f sample.sql) >& sample.log &
Tips2:ディスクの使用量を確認する

 分析クエリの実行結果を別のテーブルにINSERTしようとしたら、ディスクを使いきって異常終了、ということが使っているときに起こりました。データ量の見積りはとても重要です。

 tablenameというテーブルがどれくらいのディスクを使用しているかを確認する場合は、次のSQLを実行します。sizeの単位はMBです。

select trim(name) name, count(*) size
  from SVV_DISKUSAGE
 where name = 'tablename'
 group by name
 order by 1;

AWS Developer Forumsはこまめにチェックしよう

 クエリの異常終了はDisk Fullだけが原因ではありません。時々メンテナンスでダウンタイムが発生していたり、原因が特定できないエラーも何度か経験しました。

 AWS Developer Forumsでは、メンテナンスの告知やユーザからの質問をチェックできます。使用中におかしな事象に遭遇した場合は、似た事象が報告されていないか確認してみてください。

まとめ

 Amazon Redshiftを使ったデータ分析において、筆者が実際につまずいた点も含めて紹介しました。

 特にお伝えしたいのは、効率よく分析を行うためには、入念な事前準備が重要だということです。当たり前のことかもしれませんが、データ転送時間の見積り、テーブル設計、分析クエリの作成、実施計画などはできるだけ事前にやっておくこと、小規模のデータセットでひととおり確認することをおすすめします。

 まだ日本国内から発信される情報は少ないですが、本記事をきっかけに多くの事例が出てくることを期待しています。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

あかひつじ(アカヒツジ)

AWSをもっと業務で使ってみたいデベロッパー。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7234 2013/07/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー