前回は,
本連載のチュートリアルは,
- ※)
- Hapyrusでは,
RedshiftとFlyDataをお試しいただけるSandbox環境を無料で提供しています。また, ブラウザ上からRedshiftに対してSQLが実行できる機能もありますので, 無料のRedshift環境にご興味のある方はぜひこちらからのご登録をおすすめします。
テーブルの作成
データのロードの前に,
これらのCREATE文は,
デフォルトでは,
その他,
- ALTER COLUMNは利用不可
- テーブルのカラムを変更する場合は,
カラムの追加と削除で対応します。 - Constraintsによる制約は設定できない
- primary keyのようなキー制約はクエリのオプティマイズにのみ利用され,
一意制約としてデータロード時にエラーを返すといったようなことは無く, 重複データをチェックする機構を持ち合わせていません。このような制御はアプリ側で行う必要があります。 - サポートされているデータ型がPostgreSQLに比べて限られている
- INTEGER,
BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMPをサポート。文字コードはUTF-8をサポートしています。データタイプの詳細はAmazon Redshift Developer Guide(Data Type)を参照してください。
テーブル設計に関しては,
Redshiftへのデータのロード
Amazon Redshiftへのデータのロード方法は,
- COPYコマンドによるAmazon S3バケットからの一括ロード
- COPYコマンドによるAmazon DynamoDBのテーブルからのインポート
- INSERTクエリによるレコード単位の追加
Amazon RedshiftのAmazon Redshift Developer Guide(Loading Data)によると,
データの作成
S3バケットからデータをロードする場合,
categoryテーブルのサンプルデータ
1|Sports|MLB|Major League Baseball
2|Sports|NHL|National Hockey League
3|Sports|NFL|National Football League
今回はAmazon提供のデータをそのまま利用するため,
データのロード
S3にアップロードされたデータをロードするには,
COPYコマンドのフォーマット
COPY <Redshiftクラスタ上のテーブル名> FROM 's3://<バケット名>/<ファイルパス>' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID(Access-Key-ID)>;aws_secret_access_key=<あなたのAWSシークレットキー(Secret-Access-Key)>' <オプション>;
さっそく以下を修正し,
サンプルデータロード用のCOPYコマンド
copy users from 's3://awssampledb/tickit/allusers_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|';
copy venue from 's3://awssampledb/tickit/venue_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|';
copy category from 's3://awssampledb/tickit/category_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|';
copy date from 's3://awssampledb/tickit/date2008_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|';
copy event from 's3://awssampledb/tickit/allevents_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS';
copy listing from 's3://awssampledb/tickit/listings_pipe.txt' CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '|';
copy sales from 's3://awssampledb/tickit/sales_tab.txt'CREDENTIALS 'aws_access_key_id=<あなたのAWSのアクセスキーID>;aws_secret_access_key=<あなたのAWSシークレットキー>' delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS';
注意点として,