S3에 저장된 데이터를 쿼리

이 실습에서는 외부 테이블에 대해 쿼리를 실행합니다.
이 쿼리는 Redshift Spectrum을 사용하여 Amazon S3에서 바로 데이터를 처리합니다.

  1. 다음 명령을 실행하여 S3에 저장된 행의 수를 쿼리합니다.
SELECT COUNT(*) FROM spectrum.sales

출력값은 파일에 172,456 개의 레코드가 있음을 보여줍니다.

  1. 다음 명령을 실행하여 외부 테이블에 저장된 데이터 샘플을 확인합니다.
SELECT * FROM spectrum.sales LIMIT 10

S3에 저장된 탭으로 분리된 데이터가 일반 Redshift 테이블과 정확히 동일하게 표시되는 것을 확인할 수 있습니다.
Spectrum은 S3에서 데이터를 읽지만 마치 Redshift가 직접 읽는 것처럼 표시합니다. 또한, 쿼리는 합계 계산과 같은 일반 SQL 문을 포함할 수 있습니다.

  1. 다음 명령을 실행하여 일의 매출을 계산합니다.
SELECT SUM(pricepaid)
FROM spectrum.sales
WHERE saletime::date = '2008-06-26'

Amazon Redshift Spectrum은 임시 Amazon Redshift 테이블로 데이터를 로드할 필요없이 Amazon S3에 저장된 데이터에 직접 쿼리를 실행합니다.
또한, S3에 저장된 데이터와 Amazon Redshift에 저장된 데이터를 조인할 수 있습니다. 이를 보여주기 위해 event라는 일반 Redshift 테이블을 생성하고 이 테이블로 데이터를 로드합니다.

  1. 다음 명령을 실행하여 일반 Redshift 테이블을 생성합니다.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
)
  1. INSERT-YOUR-REDSHIFT-ROLE을 실습 2에서 생성한 redshift_role의 ARN 값을 대체하고
COPY event
FROM 's3://awssampledbuswest2/tickit/allevents_pipe.txt'
IAM_ROLE 'INSERT-YOUR-REDSHIFT-ROLE'
DELIMITER '|'
TIMEFORMAT 'YYYY-MM-DD HH:MI:SS'
REGION 'us-west-2'

Query Editor에서 이 명령을 실행하여 데이터를 events 테이블로 로드합니다. 약 30초 가량의 로딩 시간이 소요됩니다.

  1. 다음 명령을 실행하여 event 데이터의 샘플을 확인합니다.
SELECT * FROM event LIMIT 10

이제 이 새로운 event 테이블의 데이터 (Redshift 저장데이터)와 외부 sales 테이블의 데이터 (S3 저장데이터)를 조인하는 쿼리를 실행할 수 있습니다.

  1. 다음의 명령을 통해 로컬 event 테이블과 외부 sales 테이블을 조인하여 상위 10개 이벤트의 총 매출을 확인합니다.
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

이 쿼리는 가격이 30 USD 이상의 이벤트 별 (Redshift 저장데이터)로 그룹화 된 총 매출 (S3 저장데이터) 을 나열합니다.

  1. 다음의 명령을 실행하여 위의 쿼리에 대한 쿼리플랜을 확인합니다. 이 쿼리 플랜은 Redshift가 해당 쿼리를 어떻게 실행할 지 보여줍니다.
    Amazon S3에 있는 데이터에 대해 S3 Seq Scan, S3 HashAggregate 및 S3 Query Scan 단계가 실행됩니다.
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