Amazon Redshift
入門ガイド

ステップ 6: Amazon S3 のサンプルデータをロードする

これでデータベース dev を作成し、それに接続できました。次に、このデータベースにテーブルを作成し、テーブルにデータをアップロードして、クエリを実行してみます。すぐにロードして使えるサンプルデータを Amazon S3 バケットに用意しました。

注記

SQL クライアントツールを使用している場合、SQL クライアントがクラスターに接続されていることを確認してください。

このステップを完了したら、Amazon Redshift に関するより多くの情報を検索したり、「ここからどこへ進むべきですか?」で環境をリセットしたりすることができます。

サンプルデータをロードするには

  1. テーブルを作成します。

    以下の「create table」ステートメントを個別にコピーして実行し、dev データベースにテーブルを作成します。構文の詳細については、Amazon Redshift Database Developer Guideの「CREATE TABLE」を参照してください。

    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); create table venue( venueid smallint not null distkey sortkey, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer); create table category( catid smallint not null distkey sortkey, catgroup varchar(10), catname varchar(10), catdesc varchar(50)); create table date( dateid smallint not null distkey sortkey, caldate date not null, day character(3) not null, week smallint not null, month character(5) not null, qtr character(5) not null, year smallint not null, holiday boolean default('N')); create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp); create table listing( listid integer not null distkey, sellerid integer not null, eventid integer not null, dateid smallint not null sortkey, numtickets smallint not null, priceperticket decimal(8,2), totalprice decimal(8,2), listtime timestamp); create table sales( salesid integer not null, listid integer not null distkey, sellerid integer not null, buyerid integer not null, eventid integer not null, dateid smallint not null sortkey, qtysold smallint not null, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp);
  2. COPY コマンドを使用して Amazon S3 からサンプルデータをロードします。

    注記

    Amazon S3 または DynamoDB から大容量のデータセットを Amazon Redshift にロードするために、COPY コマンドを使用することをお勧めします。COPY 構文の詳細については、Amazon Redshift Database Developer Guide の「COPY」を参照してください。

    個別のサンプルデータファイルを含むファイル tickitdb.zip をダウンロードします。個別のファイルを解凍して、使用する AWS リージョンの Amazon S3 バケットの tickit フォルダに読み込みます。このチュートリアルの COPY コマンドを編集して、Amazon S3 バケットにあるファイルを指定します。Amazon S3 でファイルを管理する方法の詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「S3 バケットの作成と設定」を参照してください。

    サンプルデータをロードするには、ユーザーに代わってクラスターが Amazon S3 にアクセスするための認証を提供する必要があります。ロールベースの認証またはキーベースの認証を提供できます。ロールベースの認証を使用することをお勧めします。両方のタイプの認証の詳細については、Amazon Redshift Database Developer Guide の「CREDENTIALS」を参照してください。

    この手順では、前の手順で作成し、クラスターにアタッチした IAM ロールを参照して、認証を提供します。

    注記

    Amazon S3 への適切なアクセス許可がない場合、COPY コマンドを実行すると、S3ServiceException: Access Denied というエラーメッセージが表示されます。

    COPY コマンドには、次の例のように、IAM ロールの Amazon リソースネーム (ARN)、バケット名、AWS リージョンのプレースホルダーが含まれます。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>';

    IAM ロールを使用してアクセスを許可するには、CREDENTIALS パラメータ文字列の <iam-role-arn> を、ステップ 2: IAM ロールを作成する で作成した IAM ロールのロール ARN と置き換えます。

    COPY コマンドは、次の例のようになります。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole' delimiter '|' region '<aws-region>';

    サンプルデータをロードするには、次の COPY コマンドの <myBucket><iam-role-arn><aws-region> を実際の値に置き換えます。次に、SQL クライアントツールでコマンドを個別に実行します。

    copy users from 's3://<myBucket>/tickit/allusers_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>'; copy venue from 's3://<myBucket>/tickit/venue_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>'; copy category from 's3://<myBucket>/tickit/category_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>'; copy date from 's3://<myBucket>/tickit/date2008_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>'; copy event from 's3://<myBucket>/tickit/allevents_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region '<aws-region>'; copy listing from 's3://<myBucket>/tickit/listings_pipe.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '|' region '<aws-region>'; copy sales from 's3://<myBucket>/tickit/sales_tab.txt' credentials 'aws_iam_role=<iam-role-arn>' delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region '<aws-region>';
  3. 次にサンプルクエリを試します。詳細については、Amazon Redshift 開発者ガイドの「SELECT」を参照してください。

    -- Get definition for the sales table. SELECT * FROM pg_table_def WHERE tablename = 'sales'; -- Find total sales on a given calendar date. SELECT sum(qtysold) FROM sales, date WHERE sales.dateid = date.dateid AND caldate = '2008-01-05'; -- Find top 10 buyers by quantity. SELECT firstname, lastname, total_quantity FROM (SELECT buyerid, sum(qtysold) total_quantity FROM sales GROUP BY buyerid ORDER BY total_quantity desc limit 10) Q, users WHERE Q.buyerid = userid ORDER BY Q.total_quantity desc; -- Find events in the 99.9 percentile in terms of all time gross sales. SELECT eventname, total_price FROM (SELECT eventid, total_price, ntile(1000) over(order by total_price desc) as percentile FROM (SELECT eventid, sum(pricepaid) total_price FROM sales GROUP BY eventid)) Q, event E WHERE Q.eventid = E.eventid AND percentile = 1 ORDER BY total_price desc;
  4. (オプション) Amazon Redshift コンソールを開いて、実行したクエリを確認します。[クエリ] タブに、指定期間内に実行されたクエリの一覧が表示されます。デフォルトでは、コンソールは現在実行中のクエリを含め、最近 24 時間以内に実行されたクエリを表示します。

    1. AWS マネジメントコンソールにサインインし、Amazon Redshift コンソール(https://console.aws.amazon.com/redshift/)を開きます。

    2. 右ペインのクラスターリストで examplecluster を選択します。

    3. [Queries (クエリ)] タブを選択します。

      コンソールに実行したクエリの一覧が下の例のように表示されます。

    4. クエリに関する詳細情報を表示するには、Query 列でクエリ ID リンクを選択するか、または拡大鏡のアイコンを選択します。

      次の例は、前のステップで実行したクエリの詳細を表示したものです。