웹사이트 검색

클라우드 데이터 웨어하우징을 위한 AWS Redshift 설정


이 페이지에서

  1. 1. 작동 원리
  2. 2. 구성 단계
    1. 2.1 전제 조건
    2. 2.2 Redshift 구성 설정

    이 튜토리얼에서는 클라우드 데이터 웨어하우징을 사용하기 위해 AWS Redshift를 설정하는 방법을 설명하고 안내합니다. Redshift는 Amazon Web Services에서 클라우드에 도입한 완전 관리형 페타바이트 데이터 웨어하우스 서비스입니다. 클러스터라는 그룹으로 구성된 노드라고 하는 하나 이상의 컴퓨팅 리소스 모음을 결합하여 작동합니다. 각 클러스터는 Redshift 엔진을 실행하며 하나 이상의 데이터베이스를 포함할 수 있습니다. 아키텍처는 기본적으로 다음과 같이 작업할 수 있습니다.



    1. 작동 원리

    기본적으로 Redshift는 PostgreSQL을 핵심 엔진으로 사용하므로 대부분의 SQL 애플리케이션이 Redshift와 함께 작동할 수 있습니다. 또한 Redshift는 분석가 또는 엔지니어가 포함된 데이터로 작업할 수 있도록 BI, 분석 및 ETL(Extract, Transform, Load) 도구를 포함한 광범위한 애플리케이션과 통합될 수 있습니다.

    사용자가 Amazon Redshift 데이터 웨어하우스를 설정할 때 클러스터라는 작업을 위한 핵심 토폴로지가 있습니다. Redshift 클러스터는 1개 이상의 컴퓨팅 노드로 구성됩니다. 사용자가 둘 이상의 컴퓨팅 노드를 사용하도록 선택하면 Redshift가 자동으로 마스터 노드를 시작합니다. 이 리더 노드는 클라이언트 실행 측에서 요청 및 명령을 수신하도록 설정되며 AWS에서 요금을 청구하지 않습니다.

    클라이언트 애플리케이션은 리더 노드와만 통신합니다. 리더 노드 아래의 계산 노드는 사용자에게 투명합니다. 클라이언트가 쿼리를 실행하면 선행 노드는 쿼리를 분석하고 각 노드에 저장된 데이터의 양을 고려하여 컴퓨팅 노드에서 실행할 최적의 실행 계획을 만듭니다.

    이 튜토리얼에서는 Redhift를 자체적으로 사용하도록 설정하고 구성하는 방법을 보여줍니다. 이 예에서는 계정을 만들고 프리 티어 패키지부터 시작하겠습니다.

    2. 구성 단계

    2.1 전제 조건

    Amazon Redshift 클러스터 설정을 시작하기 전에 완료해야 하는 특정 전제 조건이 있습니다.

    먼저 AWS에 가입한 다음 완료되면 IAM 서비스로 이동하여 Redshift 사용에 사용할 수 있는 역할을 생성합니다. 아래와 같이 스크린샷을 따라갈 수 있습니다.

    완료되면 아래와 같이 역할이 성공적으로 생성되었다는 스크린샷이 표시됩니다.

    2.2 Redshift 구성 설정

    전제 조건이 완료되면 자체 Redshift 클러스터 생성을 진행할 수 있습니다. 검색 창에서 Redshift 기능을 검색하고 계속 진행합니다. 아래는 스크린샷 예시입니다.

    클러스터 생성 버튼을 클릭하고 필요한 변수로 진행합니다. 클러스터 권한 측에는 이전에 생성한 IAM 역할이 포함되어 있습니다.

    완료되면 위와 같이 redshift 대시보드에 표시되어야 합니다. 이 자습서에서는 보안 그룹을 변경하여 네트워크 보안 계층을 비활성화합니다. 이렇게 하려면 대시보드 하단으로 이동하여 인바운드 탭에 Redshift 포트를 추가합니다. 아래는 예입니다.

    모든 작업이 완료되면 이제 생성한 새 클러스터를 사용할 수 있음을 확인할 수 있습니다.

    3. 테스트 단계

    이제 데이터 웨어하우스에 액세스해 보겠습니다. 테스트하려면 왼쪽 창에서 EDITOR를 클릭하고 필요한 변수를 포함하고 데이터베이스에 연결을 클릭합니다.

    편집기 페이지로 이동해야 합니다. 이제 자체 테스트 스키마를 생성하여 시작하겠습니다. 아래와 같이 스키마를 생성한 후 실행합니다.

    좋습니다. 이제 클라이언트 로컬 측에서 테스트해 보겠습니다. 이렇게 하려면 Redshift 측에서 JDBC 또는 ODBC 연결을 가져와야 합니다. 해당 정보를 얻으려면 대시보드의 왼쪽 창에서 구성 버튼을 클릭하십시오.

    선호하는 연결 유형을 선택한 다음 필요한 라이브러리를 다운로드하고 아래 예와 같이 URL을 복사합니다.

    그런 다음 SQL 클라이언트 도구를 열고 필요한 연결 변수를 입력합니다. 여기 예제에서는 여기에서 가져올 수 있는 DBeaver라는 SQL 클라이언트 도구를 사용하고 있습니다.

    예상대로 연결이 성공해야 합니다. 어떤 경우든 인증 문제가 발생하면 AWS 보안 그룹에서 만든 구성을 확인하여 자세한 내용을 확인하십시오.

    다음으로 이전에 새로 만든 스키마 아래에 테이블 집합을 만듭니다. 다음은 클러스터에서 실행할 테이블 생성의 예입니다.

     SET search_path = imdb; 

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

    예상 결과는 아래와 같이 표시됩니다.

    다음으로 샘플 데이터를 데이터 웨어하우스에 업로드해 보겠습니다. 이 예에서는 샘플 데이터를 내 S3 버킷에 업로드한 다음 아래 스크립트를 사용하여 S3 파일에서 Redshift로 데이터를 복사했습니다.

     
    copy sales from 's3://shahril-redshift01-abcde/sales_tab.txt'
    iam_role 'arn:aws:iam::325581293405:role/shahril-redshift-s3-ro-role'
    delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'eu-west-1';

    copy dates from 's3://shahril-redshift01-abcde/date2008_pipe.txt'
    iam_role 'arn:aws:iam::325581293405:role/shahril-redshift-s3-ro-role'
    delimiter '|' region 'eu-west-1';

    로드하는 동안 어떤 식으로든 문제가 발생하면 아래와 같이 stl_load_errors라는 redshift 사전 테이블에서 쿼리하여 문제에 대한 힌트를 얻을 수 있습니다.

     select * from stl_load_errors ; 

    마지막으로 모든 작업이 완료되면 제공된 SQL 함수를 사용하여 데이터를 추출하고 조작할 수 있어야 합니다. 다음은 예제에 사용한 쿼리의 예제 스크립트 중 일부입니다.

     
    -- Get definition for the sales table.
    SELECT *
    FROM pg_table_def
    WHERE tablename = 'sales';

    -- Find total sales on each day
    SELECT b.caldate days, sum(a.qtysold) FROM sales a, dates b
    WHERE a.dateid = b.dateid
    group by b.caldate ;

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

    엄지척! 이제 데이터 웨어하우징 사용을 위해 자체 Redshift 클러스터를 성공적으로 설정했습니다. 다음으로 Redshift Spectrum을 사용하여 Redshift Cluster의 기존 데이터를 플랫 파일과 결합하는 방법을 잘 살펴보십시오.