특징 1)
특징 2)
특징 3)
특징 4)
특징 5)
만약 Diststyle이 key인 경우 칼럼 선택이 잘못되면?
SQL 예)
CREATE TABLE table_name (
column1 INT,
col2 VARCHAR(50),
...
) DISTSTYLE KEY DISTKEY(column1) SORTKEY(column3);
-- table_name의 레코드들은 col1을 기준으로 분배되고,
-- 노드 내에서 col3을 기준으로 정렬됨.
기본)
고급)
Google Colab에서 연동하기 위해 다음과 같이 설정.
위 이미지에서 작업 그룹 선택.
선택 후, 엔드포인트를 복사.
위 이미지에서 네임스페이스를 선택 후, 작업에서 Edit admin credentials 선택.
Manually add the admin password를 통해, admin 계정 사용자 암호를 설정.
Google Colab 연결을 위해서 아래 세 가지의 정보와 두 작업 필요.
Google Colab 연결)
1. %load_ext sql
로 sql 설정.
2. %sql postgresql://ID:PW@호스트이름:5439/dev
로 노드 연결. * 이때, 만약 connection time out 에러가 발생한다면 public access 활성화 및 VPC 보안 그룹의 인바운드 규칙이 있는지 확인.
raw_data: ETL 결과가 들어감.
analytics: ELT 결과가 들어감.
adhoc: 테스트용 테이블이 들어감.
pii: 개인 정보가 들어감.
(admin 권한이 부여된 상태에서) 다음 코드를 실행하여 위 스키마 생성.
%%sql
CREATE SCHEMA raw_data;
CREATE SCHEMA analytics;
CREATE SCHEMA adhoc;
CREATE SCHEMA pii;
%%sql
select * from pg_namespace;
사용자(User) 생성.
%%sql
CREATE USER username PASSWORD '*****';
%%sql
select * from pg_user;
보통 권한을, 스키마별로 권한을 부여하거나 그룹별로 권한을 부여하는 식으로 관리함.
한 사용자는 다수의 그룹에 속할 수 있음.
그룹은 (객체 지향처럼) 계승이 안 된다는 문제가 있음.
예시 그룹:
그룹 생성.
%%sql
CREATE GROUP analytics_users;
CREATE GROUP analytics_authors;
CREATE GROUP pii_users;
사용자에게 그룹에 대한 권한 부여.
%%sql
ALTER GROUP analytics_users ADD USER username;
ALTER GROUP analytics_authors ADD USER username;
ALTER GROUP pii_users ADD USER username;
결과 확인.
%%sql
select * from pg_group;
역할은 그룹과 달리 계승 구조를 만들 수 있음.
역할 생성.
%%sql
CREATE ROLE staff;
CREATE ROLE manager;
CREATE ROLE external;
사용자에게 역할에 대한 권한 부여.
%%sql
GRANT ROLE staff TO username; -- staff의 역할 권한을 username의 유저에게 부여.
GRANT ROLE staff TO ROLE manager; -- staff의 역할의 기능을 새로운 역할인 manager에게 부여.
결과 확인.
%%sql
select * from SVV_ROLES;
크게 다음과 같은 순서로 진행함.
위 화면에서 역할 생성 선택.
redshift 선택 후, 다음.
S3FullAccess를 선택 후, 다음.
역할 이름을 "redshift.read.s3"로 작성한 다음, 생성.
redshift에서 네임스페이스 선택 후, 보안 및 암호화 탭에서 IAM 역할 관리 선택.
IAM 역할 연결을 선택 후, "redshift.read.s3"에 대해서 연결 및 변경 사항 저장.
COPY 명령어 예시)
%%sql
-- 아래 쿼리에서 aws_iam_role의 값은 각자 Redshift cluster에 지정한 S3 읽기 권한 ROLE의 ARN을 지정
-- raw_data라는 스키마의 u_s_c 테이블을 목적지로 지정함.
COPY raw_data.user_session_channel
-- 파일이 저장되어 있는 곳으로부터
FROM 's3://username-test-bucket/test_data/user_session_channel.csv'
-- 권한을 확인. aws_iam_role 키 값에 적합한 값을 지정.
-- arn 값은 IAM의 역할에서 확인 가능.
credentials 'aws_iam_role=arn:aws:iam::xxxxxxx:role/redshift.read.s3'
-- csv 파일이니, 구분자는 ','로 지정하고, 첫 번째 라인은 무시한다.
-- 그리고 quotes(따옴표)를 무시하고 데이터를 입력한다.
-- 그리고 date와 time 포맷은 redshift가 알아서 지정한다.
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
COPY 명령 실행 중 에러가 났을 경우, 에러 로그 확인)
-- 가장 최근의 에러부터 확인.
SELECT * FROM stl_load_erros ORDER BY starttime DESC;
%%sql
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
)
%%sql
COPY raw_data.user_session_channel
FROM 's3://jaeho-test-bucket/test_data/user_session_channel.csv'
credentials 'aws_iam_role=arn:aws:iam::xxxxx:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
COPY raw_data.session_timestamp
FROM 's3://jaeho-test-bucket/test_data/session_timestamp.csv'
credentials 'aws_iam_role=arn:aws:iam::xxxxx:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
COPY raw_data.session_transaction
FROM 's3://jaeho-test-bucket/test_data/session_transaction.csv'
credentials 'aws_iam_role=arn:aws:iam::xxxxx:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;