학습주제
Redshift COPY 실습
학습내용
외부 소스를 다운로드
s3 생성 후 외부 소스 업로드
IAM 역할 생성
클러스터에 역할 부여
구글 콜랩에서 COPY 실습
s3 콘솔로 이동
리전은 레드쉬프트를 생성한 같은 리전으로 선택 (오레곤)
기본 선택
다 기본 선택 후 버킷 생성
아무것도 없음
폴더 생성
해당 폴더로 접속
다운받은 csv 드래그해서 업로드
업로드 시간이 조금 걸린다. 리전이 멀어서 그런거 같음
파일로 들어가보면
s3 URI가 뜬다 복사해준다
IAM 콘솔 방문
역할 클릭
역할 만들기
AWS 서비스 선택
다른 AWS 사용사례로 redshift 선택
Redshift - Customizable
s3 검색 후 정책 클릭
역할 생성
ARN은 나중에 쓰임
네임스페이스 이동
보안 및 암호화 - IAM 역할 관리
권한 목록 확인
IAM 역할 관리 - IAM 역할 연결
IAM 역할 연결
CREATE TABLE raw_data.user_session_channel (
userid integer,
sessionid varchar(32) primary key,
channel varchar(32)
);
-- 아래 쿼리에서 aws_iam_role의 값은 각자 Redshift cluster에 지정한 S3 일기 권한 ROLE의 ARN을 지정
COPY raw_data.user_session_channel
FROM 's3://jongwook-redshift-bucket/test_data/user_session_channel.csv'
credentials 'aws_iam_role=arn:aws:iam::542670215238:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1
removequotes;
잘 들어갔나 확인
SELECT * FROM raw_data.user_session_channel LIMIT 10;
CREATE TABLE raw_data.session_timestamp (
sessionid varchar(32) primary key,
ts timestamp
);
COPY raw_data.session_timestamp
FROM 's3://jongwook-redshift-bucket/test_data/session_timestamp.csv`
credentials 'aws_iam_role=arn:aws:iam::542670215238:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1
removequotes;
CREATE TABLE raw_data.session_transaction (
sessionid varchar(32) primary key,
refunded boolean,
amount int
)
COPY raw_data.session_transaction
FROM 's3://jongwook-redshift-bucket/test_data/session_transaction.csv'
credentials 'aws_iam_role=arn:aws:iam::542670215238:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1
removequotes;
CTAS 방법
CREATE TABLE analytics.mau_summary AS
SELECT
TO_CHAR(A.ts, 'YYYY-MM') AS month,
COUNT(DISTINCT B.userid) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1
ORDER BY 1 DESC;