BLOG

Amazon Redshift를 GettingStarted로 시작해보기!!
작성일: 2016-09-06

작성 : 메가존 SA팀

Amazon Redshift를 처음 사용하시는 분들을 위해 DbVisualizer를 사용하여 쉽게 Amazon S3에서 샘플 데이터를 Copy 하고 Amazon Redshift의 데이터들을 확인해 보는 방법을 설명하겠습니다.

Amazon Redshift는 AWS에서 제공하고 있는 관리형 Data warehouse 서비스 입니다.

클러스터 안에 필요한 인스턴스를 추가할 수 있으며 인스턴스를 추가함에 따라 데이터 용량과 성능이 향상되는 구조로 동작하게 됩니다.

 

이번에 테스트해 볼 구성은 아래와 같이 데이터를 복사해 와서 Redshift에 접속하여 데이터를 확인해 보는 기본적은 테스트입니다.

 

 

DbVisualizer(여러 데이터베이스에 접속하여 작업을 할 수 있는 무료 도구)를 먼저 설치해 보죠.

아래와 같은 데이터베이스를 지원합니다.

 

 

 

https://www.dbvis.com/download/ <– 여기에서 다운로드 합니다.

아래 다운로드 페이지에서 운영체제에 맞는 설치 파일을 다운로드 받아 설치 합니다.

설치 과정은 아주 간단하여 여기에서는 설명하지 않겠습니다.

 

 

 

 

그 다음 Redshift의 Cluster를 구성해 보겠습니다.

AWS 관리 콘솔에서 Redshift를 선택하면 아래와 같은 화면이 나옵니다.

[Launch Cluster]를 선택합니다.

 

 

 

아래 항목들을 지정하고 [Continue]를 선택합니다.

Port는 기본 포트 5439 그래도 사용합니다.

 

 

 

다음 화면에서는 기본값으로 [Continue] 버튼을 선택합니다.

Node Type에 대한 정보는 아래 표를 참조해 주세요.

 

 

 

 

서울 리전에서 사용 가능한 Node Type 입니다.

 

 

 

 

다음 화면에서도 모든 값은 기본값을 사용하고 Security Group만 주의해서 설정합니다.

위 화면에서 5439 포트를 지정했기 때문에 Security Group에서 Inbound 5439를 허가해 주는 Security Group를 설정하고 지정해 줘야 합니다.

Security Group에 대한 설정 방법은 아래 AWS 정식 문서를 확인해 주세요.

http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-network-security.html

 

그럼 [Continue]선택하고 다음화면으로 진행합니다.

 

 

 

 

Cluster 구성에 대한 리뷰 화면이 나오면 [Launch Cluster]를 선택하여 Cluster를 생성합니다.

 

 

 

 

Cluster가 정상적으로 생성되면 아래와 같은 화면을 볼 수 있습니다.

아래 화면에서 접속에 필요한 Endpoint를 메모해 둡니다.

 

 

 

 

DbVisualizer 를 아래와 같이 실행합니다.

MAC에서 실행한 화면입니다.

 

 

 

 

왼쪽 위 화면에서 아래 아이콘을 클릭합니다.

 

 

 

 

아래와 같은 화면이 나오면 [No Wizard]를 선택합니다.

 

 

다음은 위에서 생성한 Redshift에 접속하기 위한 정보를 입력합니다.

[Name]  – Redshift test

[Driver(JDBC)] – PostgreSQL

[Database Server] – 위에서 메모한 Endpoint를 입력

[Database Port] – 5439

[Database Userid] – 지정한 Userid

[Database Password] – 지정한 Password

 

 

 

 

위의 정보가 정상적으로 설정 되었다면 아래와 같이 Redshift에 접속한 화면을 볼 수 있습니다.

 

 

 

 

이제 테스트 데이터를 Copy 해보겠습니다.

아래 SQL Commander 추가 버튼을 선택하고 샘플 데이터를 복사하기 위한 테이블을 생성합니다.

 

 

 

 

Create table 문을 입력하고 실행 버튼을 클릭하면 테이블이 생성됩니다.

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);

 

 

마지막으로 아래와 같이 샘플 데이터를 Copy하게 되면 모든 작업은 끝나게 됩니다.

AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY는 AWS IAM 서비스를 통해 생성한 값을 지정해 주면 됩니다.

 

copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' region 'us-west-2';

copy venue from 's3://awssampledbuswest2/tickit/venue_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' region 'us-west-2';

copy category from 's3://awssampledbuswest2/tickit/category_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' region 'us-west-2';

copy date from 's3://awssampledbuswest2/tickit/date2008_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' region 'us-west-2';

copy event from 's3://awssampledbuswest2/tickit/allevents_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-west-2';

copy listing from 's3://awssampledbuswest2/tickit/listings_pipe.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>' 
delimiter '|' region 'us-west-2';

copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt'
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'
delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'us-west-2';

 

 

위의 샘플 데이터 Copy가 끝나면 실제 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;

 

 

마지막으로 AWS Redshift 관리 콘솔에서 아래와 같이 성능 지표나 실행된 쿼리들을 확인할 수 있습니다.

 

 

 

 

 

 

여기까지 Amazon Redshift를 GettingStarted로 시작해보기!! 였습니다.

 

Getting Started with Amazon Redshift

=> http://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html

 

Amazon Redshift 에 대해 더 궁금하신 사항이 있으시면 메가존으로 연락 주십시요.