이 실습에서는 외부 테이블에 대해 쿼리를 실행합니다.
이 쿼리는 Redshift Spectrum을 사용하여 Amazon S3에서 바로 데이터를 처리합니다.
SELECT COUNT(*) FROM spectrum.sales
출력값은 파일에 172,456 개의 레코드가 있음을 보여줍니다.
SELECT * FROM spectrum.sales LIMIT 10
S3에 저장된 탭으로 분리된 데이터가 일반 Redshift 테이블과 정확히 동일하게 표시되는 것을 확인할 수 있습니다.
Spectrum은 S3에서 데이터를 읽지만 마치 Redshift가 직접 읽는 것처럼 표시합니다. 또한, 쿼리는 합계 계산과 같은 일반 SQL 문을 포함할 수 있습니다.
SELECT SUM(pricepaid)
FROM spectrum.sales
WHERE saletime::date = '2008-06-26'
Amazon Redshift Spectrum은 임시 Amazon Redshift 테이블로 데이터를 로드할 필요없이 Amazon S3에 저장된 데이터에 직접 쿼리를 실행합니다.
또한, S3에 저장된 데이터와 Amazon Redshift에 저장된 데이터를 조인할 수 있습니다. 이를 보여주기 위해 event라는 일반 Redshift 테이블을 생성하고 이 테이블로 데이터를 로드합니다.
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
)
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초 가량의 로딩 시간이 소요됩니다.
SELECT * FROM event LIMIT 10
이제 이 새로운 event 테이블의 데이터 (Redshift 저장데이터)와 외부 sales 테이블의 데이터 (S3 저장데이터)를 조인하는 쿼리를 실행할 수 있습니다.
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 저장데이터) 을 나열합니다.
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