AWS에서 지원하는 데이터 웨어하우스 서비스
2 펩타바이트 데이터 까지 처리 가능
최소 160gb(고정비용 ssd사용 - 처리속도가 더 빠름)
still olap - 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용불가
칼럼 기반 스토리지
레코드 별로 저장하는 것이 아니라 컬럼별로 저장함
컬럼별로 압축이 가능하며 컬럼을 추가하거나 삭제하는 것이 아주 빠름
벌크 업데이트 지원
고정 용량/비용 sql 엔진 - 현재 redshift serverless로 가변 비용도 가능
데이터 공유 기능 - snowflake
다른 데이터 웨어하우스처럼 Primary key uniqueness를 보장하지 않음
dc2.large -> 0.16tb 를 2개 놓아서 0.32tb로 scale out
더 좋은 사양으로 업그레이드 scale up
이를 resizing이라 부르며 auto scaling 옵션을 설정하면 자동으로 이뤄짐
(Dense compute 와 manage storage에서만 가능)
위의 데이터웨어하우스가 좀 더 scalable but) financing하기가 어려움
redshift가 두대 이상의 노드로 구성되면 한 테이블의 레코드들의 저장 방식은?
빅쿼리나 snowflake은 분산된 노드에 레코드를 어떻게 저장할 건지 고민할 필요도 알 방법도 없다. redshift는 정해줘야함.
Redshift가 두 대 이상의 노드로 구성되면 그시점부터 테이블 최적화가 중요
한 테이블의 레코드들을 어떻게 다수의 노드로 분배할 것이냐?
Distkey, Diststyle, Sortkey 세 개의 키워드를 알아야함
Diststyle은 레코드 분배가 어떻게 이뤄지는지를 결정
레코드 분포에 skew가 발생 -> 분산처리의 효율성이 사라짐 - 데이터 적재의 불균형
bigquery나 snowflake는 이러한 속성을 고민할 필요가 없음
create table my_table(
column1 int,
column2
...
) diststyle key distkey(column1) sortkey(column3)
column1의 값이 같은 레코드 끼리 같은 노드로 뭉침. my_table의 레코드들은 컬럼1의 값을 기준으로 분배되고 같은 노드 안에서는 column3의 값을 기준으로 소팅이됨.
sortkey는 timestamp가 default. 해당 key를 가지고 join을 하거나 groupby를 한다면 -> distribution key가 좋고, 만약 skew가 너무 심하다. 그렇다면 even이나 all이 좋음.
프로덕션 db와 비슷
차이점은?
레드시프트는 json을 native한 타입으로 지원x. 즉 character type으로 받아와서 json 함수로 Parsing 하는 것
참고로 서울 리전은 비싸다..
먼저 public access를 on gownwk
vpc 설정에서 인바운드 규칙에 포트번호 5439를 0.0.0.0/0에 오픈
!pip install SQLAlchemy==1.4.49
!pip install ipython-sql==0.4.1
SQLAlchemy의 업그레이드로 해당 코드를 꼭 작성해줘야함
Redshift Schema : 다른 기타 관계형 데이터베이스와 동일한 구조
DEV
스키마를 설정하고 싶다면 -> admin권한이 필요함
analytics_users > analytics_authors > pii_users
그룹의 문제는 analytics_user 권한을 authors에서도 일부분 적용하게끔 하면 좋겠지만 (oop 하듯이) but) redshift는 안됨.
참고)
데이터베이스 스키마는 관계형 데이터베이스에서 데이터가 구조화되는 방식을 정의합니다. 여기에는 테이블 이름, 필드, 데이터 유형, 그리고 이러한 엔티티 간의 관계
Amazon Redshift에서 스키마는 테이블을 그룹화하고 조직화하기 위한 개체를 나타냅니다.
역할은 그룹과 달리 계승 구조를 만들 수 있음
역할은 사용자에게 부여될 수도 있고 다른 역할에 부여될 수 도 있음.
한 사용자는 다수의 역할에 소속가능함.
copy 명령을 사용해 raw_data 스키마 밑 3개의 테이블에 레코드를 적재해볼 예정
각 테이블을 create table 명령으로 raw_data 스키마 밑에 생성
이때 각 테이블의 입력이 되는 csv 파일을 s3로 복사
s3에서 해당 테이블로 복사를 하려면 redshif가 s3접근 권한을 가져야함
먼저 redshift가 s3를 접근할 수 있는 역할을 만들고
이역할을 redshift클러스터에 지정하자
s3가 redshift에 접근할 수 있도록 iam을 설정해주자.
csv 파일이기에 ddelimiter로는 콤마(,)로 지정
csv 파일에서 문자열이 따옴표로 둘러싸인 경우 제거하기 위해 removequotes 지정
csv 파일의 첫번째 라인을 무시하기위해 ignoreheader 1을 지정
credentials에 앞서 redshift 지정한 role을 지정하고 arn을 읽어와야한다
aksdlf copy 명령 실행 중에 에러가 나면 stl_load_errors 테이블 내용을 보고 확인
SELECT * FROM stl_load_errors ORDER BY startime DESC;