RedshiftでCOPYコマンドを試してみた


はじめに

この記事は勉強用として試したことまとめたものです。
今回はS3にCSVファイルを配置してRedshiftにCOPYを試してみました。

Redshiftとは

  • AWSが提供するDWHのマネージドサービスである。
  • PostgreSQLをベースに開発されたもの。
  • 集約・分析に最適化されたサービスである。
  • クラスターを起動している間は課金が発生。現時点でRedshiftに停止機能はないため、
    スナップショットを取得し利用するときにスナップショットから復元する必要あり。
  • 自動起動停止はLambdaで実装かなと。
  • 公式ドキュメント
    https://aws.amazon.com/jp/redshift/

特徴

  • 集約、分析に特化しているためデータの格納方式が列指向である。
  • MPP(Massively Parallel Processing:超並列処理)である。
  • S3からCOPYコマンドでデータを簡単にロードできる。
  • また、S3のデータを参照して分析クエリを発行するRedshift Spectrumという機能もある。

事前準備

  • Redshiftにデータを投入するために事前にテーブルを作成する。
  • SQL Workbench/J といったクライアントツールを利用してもいいが、クエリエディタが便利なのでこちらで実行する。
create table pokemon(
  no INT,
  name VARCHAR(128),
  type1 VARCHAR(32),
  type2 VARCHAR(32),
  nomal_characteristic1 VARCHAR(48),
  nomal_characteristic2 VARCHAR(48),
  dream_characteristic2 VARCHAR(48),
  hp INT,
  attack INT,
  defense INT,
  special_attack INT,
  special_defense INT,
  speed INT,
  sum INT
) 
  • 正常終了を確認。

  • 投入データをS3に配置する。今回は以下データをS3に配置。

図鑑番号,ポケモン名,タイプ1,タイプ2,通常特性1,通常特性2,夢特性,HP,こうげき,ぼうぎょ,とくこう,とくぼう,すばやさ,合計
1,フシギダネ,くさ,どく,しんりょく,,ようりょくそ,45,49,49,65,65,45,318
2,フシギソウ,くさ,どく,しんりょく,,ようりょくそ,60,62,63,80,80,60,405
3,フシギバナ,くさ,どく,しんりょく,,ようりょくそ,80,82,83,100,100,80,525
4,ヒトカゲ,ほのお,,もうか,,サンパワー,39,52,43,60,50,65,309
5,リザード,ほのお,,もうか,,サンパワー,58,64,58,80,65,80,405
6,リザードン,ほのお,ひこう,もうか,,サンパワー,78,84,78,109,85,100,534
7,ゼニガメ,みず,,げきりゅう,,あめうけざら,44,48,65,50,64,43,314
8,カメール,みず,,げきりゅう,,あめうけざら,59,63,80,65,80,58,405
9,カメックス,みず,,げきりゅう,,あめうけざら,79,83,100,85,105,78,530

・・・(省略)・・・

データロード

  • バケットとIAMロールを指定してコマンドを実行する。
copy pokemon from 's3://<バケット名>/pokemon_data/' CSV
iam_role 'arn:aws:iam::111111111111:role/myRedshiftRole'
region 'ap-northeast-1'
IGNOREHEADER 1;
  • 正常終了を確認。

データ確認

  • SELECTで確認してみる。
select * from public."pokemon"limit 10;
  • 確認できた。

まとめ

参考