# AWS Redshift에서 S3 버킷 데이터에 직접 쿼리하여 데이터를 분석하는 과정에 대해서 알아봅시다.
# AWS Redshift는 클러스터 기반의 쿼리 분석기 입니다. 한마디로 하나의 데이터베이스 라고 생각하면 될 듯 합니다.
1. AWS Redshift에서 AWS의 다른 서비스 사용을 위해 IAM 역할 생성이 필요하다.
- IAM 서비스로 이동하여 IAM 역할을 생성한다.
- IAM 콘솔에서 역할 > 역할 만들기를 클릭하여 역할을 생성한다.
- 권한 정책은 AmazonS3ReadOnlyAccess, AWSGlueConsoleFullAccess 2개의 서비스에 대한 권한을 추가한다.
- 필요한 S3 스토리지에 접근해서 데이터를 읽을수 있는 역할과 생성할 테이블의 정의가 Glue를 통해서 저장이 된다.
- 추가로 역할 이름을 생성하면 역할을 생성 할 수 있다.
- 다음과 같이 설정 후 역할을 생성 합니다. 현재 생성하는 역할은 AWS Redshift에서 사용할 역할 입니다.
- 역할이 정상적으로 생성된것을 확인 할 수있습니다.
2. 생성된 IAM 역할을 기반으로 Redshift 클러스터를 생성
- 아래의 Redshift 구성 예제에서 Redshift 클러스터를 생성할때 위에서 생성한 IAM 권한만 추가하여 신규로 생성하면 된다. IAM 권한을 부여하여 클러스터를 생성하는 단계 까지만 진행하면 된다.
2022.01.04 - [AWS/AWS Redshift] - Amazon Redshift 구성 예제
3. S3 버킷의 데이터 컬럼과 Redshift 클러스터의 DB 테이블 컬럼 맵핑작업 수행
- S3버킷의 대상 파일의 컬럼 리스트와 Redshift DB 테이블의 컬럼 리스트를 타입과 크기등을 고려하여 동일하게 맵핑 시켜야 한다.
- 예제가 되는 S3 버킷 파일의 컬럼은 아래와 같다.
- 위의 헤더 컬럼을 기반으로 Redshift에서 테이블을 생성해야 한다.
- 위의 헤더 컬럼 기반 Redshift 에서 테이블 생성하기
CREATE TABLE "public"."s3-analysis-01"
(invoiceno character varying(256) encode lzo,
stockcode character varying(256) encode lzo,
description character varying(256) encode lzo,
quantity character varying(256) encode lzo,
invoicedate character varying(256) encode lzo,
unitprice character varying(256) encode lzo,
customerid character varying(256) encode lzo,
country character varying(256) encode lzo);
- 테이블이 생성된 모습, 현재 생성된 테이블에 S3 데이터를 로드하여 데이터를 INSERT 시킬 예정이다.
4. S3 버킷에서 데이터 로드 및 데이터 조회하기
- S3 버킷에서 AWS Redshift로 데이터 로드하기, 데이터를 로드할 버킷 파일명을 지정하고, 이전에 생성한 IAM 권한을 부여, 스키마를 선택 후 생성한 테이블을 맵핑 후 Load data를 클릭하여 데이터를 불러온다.
- 불러온 데이터 확인
SELECT * FROM "s3-analysis"."public"."s3-analysis-01";
- 결론은 S3 버킷에서 로드할 데이터의 헤더 정보와 테이블 컬럼 정보가 서로 맵핑이 되어야 정상적으로 데이터를 불러올 수 있다. (데이터가 많아지고 데이터 타입 및 정합성이 맞지 않는 경우 매우 고생할것으로 보인다...)
- 다음에는 AWS Glue와 Redshift 연계 후 Athena에서 데이터를 분석하는 프로세스를 구현해보자.
'⭐ AWS > AWS Redshift' 카테고리의 다른 글
Amazon Redshift 구성 예제 (0) | 2022.01.04 |
---|