COPY
명령을 통해 raw_data
스키마 밑 3 개의 테이블에 레코드를 적재하자.csv 파일
이다. S3 bucket
에 업로드해 주고 Redshift
가 S3
에 접근하여 COPY
명령을 통해 데이터를 적재하는 과정을 거쳐야 한다.✍ 보통 벌크 업데이트 (Bulk Update)를 할 때는 csv 파일보다는 binary file format을 쓰게 된다.
raw_data
의 목적은 ETL을 통해 외부에서 읽어온 데이터를 저장한 스키마이다.
위의 raw_data 스키마를 참고하여 다음과 같이 총 세 개의 테이블을 생성해 준다.
CREATE TABLE raw_data.user_session_channel(
USERID INTEGER
, SESSIONID VARCHAR(32) PRIMARY KEY
, CHANNEL VARCHAR(32)
);
CREATE TABLE raw_data.session_timestamp(
SESSIONID VARCHAR(32) PRIMARY KEY
, TS TIMESTAMP
);
CREATE TABLE raw_data.session_transaction(
SESSIONID VARCHAR(32) PRIMARY KEY
, REFUNDED BOOLEAN
, AMOUNT INT
);
PG_TABLES
을 조회해 주면 된다.WHERE
절을 통해 SCHEMANAME
의 값을 설정해 주면 된다.SELECT *
FROM PG_TABLES
WHERE SCHEMANAME = 'raw_data';
RAW_DATA
스키마에 세 개의 테이블이 생긴 것을 확인할 수 있다.COPY SQL
을 통해 데이터를 적재해 주기 위해서는 csv를 S3에 업로드 해 주는 과정이 필요하다.AWS
콘솔에서 S3 bucket
을 생성해 주어야 한다. S3
를 검색해서 S3
콘솔로 이동하면 다음과 같이 버킷 만들기
라는 버튼이 존재한다.버킷(bucket)
을 생성해 주어야 한다.버킷(bucket)
의 이름을 설정해 주어야 한다. 이때 버킷(bucket)
의 이름은 전역에서 고유한 값이어야 한다.버킷(bucket)
이 생성되면 다음과 같이 상단에 알림이 뜬다. 버킷(bucket)
을 선택하고 내부로 들어가면 다음과 같은 상세 창이 뜬다.폴더
를 생성해 보자.폴더 만들기
버튼을 누른다.업로드
버튼을 눌러 준다.csv 파일
이 모두 올라갔다면 가장 하단에 있는 업로드
버튼을 눌러 업로드를 해 준다.IAM (Identity and Access Management)
을 통해 생성해 주어야 한다.IAM 대시 보드
에서 역할
을 선택해 주면 다음과 같이 역할
의 목록이 뜨게 된다.S3
에 대한 신규 역할을 생성해 줄 것이기 때문에 역할 만들기
버튼을 눌러 역할을 생성한다.S3
는 AWS 서비스
이기 때문에 AWS 서비스
를 선택해 준다.EC2
와 Lambda
가 있는 것을 볼 수 있다.Redshift
에서 사용할 역할(Role)
을 지정해 주는 것이므로 다른 AWS 서비스 사용 사례를 Redshift
로 지정해 준다. Customizable
을 선택해 주었다.IAM 역할(Role)
에 부여할 수 있는 다양한 권한 정책이 나오게 된다.Redshift
가 S3
에 대한 접근 권한을 갖는 것이므로 S3
를 검색해 주고 그와 관련된 정책을 찾아 준다.AmazonS3FullAccess
는 S3의 모든 접근 권한을 주는 것인데 이를 선택하고 다음을 눌러 준다.역할(Role)
의 이름을 지정해 준다.역할 생성
버튼을 눌러 준다.IAM Role
을 클릭하면 상세 창이 뜨게 된다.ARN
의 위치는 다음과 같다. Redshift 대시 보드
로 돌아가 IAM 역할(Role)
을 부여해 줄 네임 스페이스
를 선택해 준다.보안 및 암호화
에 권한을 보면 IAM
권한이 지정된 것이 없어 빈 목록임을 확인할 수 있다.IAM 역할 관리
를 눌러 준다.IAM 역할 관리
화면으로 넘어가게 되는데 이때 IAM 역할 연결
을 선택해 준다.IAM 역할(Role)
을 연결해 준 휘 변경 사항을 저장해 주면 이제 Redshift
는 S3 bucket
에 원하는 대로 접근 가능한 상태가 된 것이다.COPY SQL
사용한다. 📑 COPY 레퍼런스delimiter(구분 문자)
로는 콤마(,)를 사용해 준다.removequotes
를 지정해 준다.csv 파일
의 헤더를 무시하기 위해 IGNOREHEADER 1
을 지정해 준다.CREDENTIALS
에 앞서 Redshift
에서 지정한 역할(Role)
을 사용해 주는데 이때 역할의 ARN
을 읽어와야 한다.COPY raw_data.user_session_channel
FROM 's3://s3의 csv 위치'
CREDENTIALS 'aws_iam_role=arn:aws:iam:xxxxxx:role/redshift.read.s3'
DELIMITER ','
DATEFORMAT 'auto'
TIMEFORMAT 'auto'
IGNOREHEADER 1
REMOVEQUOTES;
raw_data.user_session_channel
의 데이터 값을 조회해 본다.SELECT *
FROM raw_data.user_session_channel
LIMIT 10;