メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

ステップ 4: Amazon S3 のデータにクエリを実行する

外部テーブルを作成すると、他の Amazon Redshift テーブルにクエリを実行する際に使用するものと同じ SELECT ステートメントでこれらのテーブルにクエリを実行できます。これらの SELECT ステートメントクエリには、テーブルの結合、データの集計、および述語のフィルタリングが含まれます。

Amazon S3 のデータにクエリを実行するには

  1. SPECTRUM.SALES テーブルの行数を取得します。

    Copy
    select count(*) from spectrum.sales;
    count ------ 172462
  2. Amazon S3 に大きなファクトテーブルを、Amazon Redshift に小さなディメンションテーブルを保持することがベストプラクティスとなります。「Amazon Redshift の開始方法」の酸プロデータをロードすると、データベースに EVENT という名前のテーブルが現れます。テーブルが見つからない場合は、次のコマンドを使用して EVENT テーブルを作成します。

    Copy
    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);
  3. 次の COPY コマンドの IAM ロール ARN を「ステップ 1. Amazon Redshift 用の IAM ロールを作成する」で作成したロール ARN と置き換え、[EVENT] テーブルをロードします。

    Copy
    copy event from 's3://awssampledbuswest2/tickit/allevents_pipe.txt' iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-west-2';

    次の例では、外部テーブル SPECTRUM.SALES をローカルテーブル EVENT と結合し、トップ 10 イベントの合計セールスを確認します。

    Copy
    select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
    eventid | sum --------+--------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 6471 | 47997.00 2118 | 47863.00 984 | 46780.00 7851 | 46661.00 5638 | 46280.00
  4. 前のクエリのクエリプランを表示します。Amazon S3 のデータに対して実行された S3 Seq ScanS3 HashAggregate、および S3 Query Scan のステップに注意してください。

    Copy
    explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
    Copy
    QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://awssampledbuswest2/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)