步驟 4:在 Amazon S3 中查詢您的資料 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 4:在 Amazon S3 中查詢您的資料

在您建立外部資料表後,您可以透過用於查詢其他 Amazon Redshift 資料表的相同 SELECT 陳述式查詢它們。這些 SELECT 陳述式查詢包括聯結資料表、彙總資料和述詞篩選。

若要在 Amazon S3 中查詢您的資料

  1. 獲取 SALES 資料表中的資料列數。

    select count(*) from myspectrum_schema.sales;
    count 
    ------
    172462
  2. 根據最佳實務,請將較大的事實資料表存放在 Amazon S3 和 Amazon Redshift 中的較小維度資料表。如果將示例數據加載到開始使用 Amazon RedShift,您的資料庫中會有名為 EVENT 的資料表。如果沒有,請使用以下命令來建立 EVENT 資料表。

    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 event from 's3://awssampledbuswest2/tickit/allevents_pipe.txt' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-west-2';

    以下範例會結合使用外部資料表 MYSPECTRUM_SALES 資料表與本機 EVENT 資料表,以查找前十名事件的銷售總計。

    select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.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. 檢視先前查詢的查詢計畫。請注意S3 Seq ScanS3 HashAggregate,以及S3 Query Scan針對 Amazon S3 上的資料運行的步驟。

    explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
    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 myspectrum_schema.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)