일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- truncate
- 웹 스크래핑
- 알고리즘
- 데이터 웨어하우스
- Django
- SQL
- redshift
- 데이터마트
- ELT
- docker-compose
- Hive
- Kafka
- yarn
- spark
- snowflake
- 데이터파이프라인
- docker
- airflow.cfg
- 컨테이너 삭제
- Serializer
- airflow
- 웹 크롤링
- AWS
- ETL
- dag
- Django Rest Framework(DRF)
- dag 작성
- selenium
- docker hub
- 데이터레이크
Archives
- Today
- Total
개발 기록장
03. Redshift 고급 기능 실습(권한과 보안/백업 등) 본문
반응형
학습 주제: Redshift 고급 기능 실습, 권한과 보안, 백업과 테이블 복구, 기타 관련 서비스, Redshift Spectrum, Redshift ML
Redshift 권한과 보안
사용자별 테이블 권한 설정
- 일반적으로 사용자별, 테이블별 권한 설정 하지 않음
- 복잡하고 실수의 가능성이 높음
- 역할(Role)/그룹(Group)별로 스키마 별 접근 권한을 부여하는 것이 일반적
- RBAC(Role Based Access Control)방식이 새로운 트렌드: 그룹(Group)보다 더 편리
- 여러 역할에 속한 사용자의 경우, 각 역할의 권한을 모두 갖게 됨(Inclusive)
- 개인정보와 관련된 테이블은 별도 스키마 설정
- 극히 일부 사람만 속한 역할에 접근 권한 부여
사용자 그룹 권한 설정
analytics_authors | analytics_users | pii_users | admin | |
---|---|---|---|---|
raw_data tables | 읽기 | 읽기 | X | 읽기 및 쓰기 |
analytics tables | 읽기 및 쓰기 | 읽기 | x | 읽기 및 쓰기 |
adhoc tables | 읽기 및 쓰기 | 읽기 및 쓰기 | X | 읽기 및 쓰기 |
pii tables | X | x | 읽기 | 읽기 및 쓰기 |
analytics_authors
GRANT ALL ON SCHEMA analytics TO GROUP analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_authors;
GRANT ALL ON SCHEMA adhoc TO GROUP analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA adhoc TO GROUP analytics_authors;
GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_authors;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_authors;
analytics_users
GRANT USAGE ON SCHEMA analytics TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_users;
GRANT ALL ON SCHEMA adhoc TO GROUP analytics_users;
GRANT ALL ON ALL TABLEs IN SCHEMA adhoc TO GROUP analytics_users;
GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_users;
pii_users
GRANT USAGE ON SCHEMA pii TO GROUP pii_users;
GRANT SELECT ON ALL TABLES IN SCHEMA pii TO GROUP pii_users;
컬럼 레벨 보안(Column Level Security)
- 테이블내의 특정 칼럼(들)을 특정 사용자나 그룹/역할에만 접근 가능하게 하는 것(한 테이블 내에서 컬럼 단위의 보안(접근)
- 보통 개인정도 등에 해당하는 컬럼을 권한이 없는 사용자들에게는 감추는 목적으로 사용
- 가장 좋은 방법은 해당 컬럼을 별도의 테이블로 구성하는 것
- 또는 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것
레코드 레벨 보안(Row Level Security)
- 테이블내의 특정 레코드(들)을 특정 사용자나 그룹/역할에만 접근 가능하게 하는 것
- 특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 다는 형태로 동작
- 이를 RLS(Record Level Security) Policy라고 함
- CREATE PLS POLICY 명령을 사용하여 Policy를 만들고 이를 ATTACH RLS POLICY 명령을 사용해 특정 테이블에 추가
- 좋은 방법은 별도의 테이블로 관리하는 것
- 더 좋은 방법은 보안이 필요한 정보를 데이터 시스템으로 로딩하지 않는 것
Redshift 백업과 테이블 복구
Redshift가 지원하는 데이터 백업 방식(고정비용)
- 기본적으로 백업 방식은 마지막 백업으로부터 바뀐 것들만 저장하는 방식
- Snapshot이라고 함
- 백업을 통해 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구하는 것이 가능(Table Restore)
- 또한, 과거 시점의 내용으로 Redshift 클러스터를 새로 생성하는 것도 가능
- 자동 백업
- 기본은 하루(24시간)이지만 최대 과거 35일까지의 변경을 백업 가능
- 이 경우 백업은 같은 지역에 있는 S3에 이뤄짐
- 다른 지역에 있는 S3에 하려면, Cross-regional snapshot copy를 설정해야 함
- 이는 보통 재난시 데이터 복구에 유용함
- 매뉴얼 백업
- 언제든 원할 때 만드는 백업으로 명시적으로 삭제할 때까지 유지됨(혹은 생성시 보존 기한 지정)
Redshift Serverless가 지원하는 데이터 백업 방식(가변비용)
- 고정비용 Redshift에 비해 제한적이고 더 복잡함
- Snapshot 이전에 Recovery Poins가 존재함
- Recoverry Point를 Snapshot으로 변환 후 여기서 테이블 복구를 하거나, 이것으로 새로운 Redshift 클러스터 등을 생성함
- Recovery Points는 과거 24시간에 대해서만 유지됨
Redshift 관련 기타 서비스 소개
Redshift Spectrum
- Redshift의 확장 기능
- 기본적으로 Redshift 클러스터가 필요함
- 별도의 Setting 필요 X
- S3와 Redshift 클러스터가 같은 Region에 존재해야 함
- S3에 있는 파일들을 마치 테이블처럼 SQL로 처리 가능
- S3 파일들을 외부 테이블들(external table)로 처리하면서 Redshift 테이블과 조인 가능
- S3 외부 테이블들은 보통 Fact 테이블들이 되고 Redshift 테이블들은 Dimension 테이블
- 1TB 스캔할 때마다 $5 비용 발생
Redshift Serverless
- 기존의 Redshift는 용량을 미리 결정하고 월정액(Fixed Cost) 지급: 고정 비용
- Redshift Serverless는 사용한 만큼 비용 지불하는 가변 비용 옵션
- BigQuery와 같은 사용한 자원에 따른 비용 산정 방식
- 데이터 처리 크기와 특성에 따라 오토 스케일링 적용
Athena
- AWS의 Presto 서비스로 Redshift Spectrum과 비슷한 기능 제공
- S3에 있는 데이터들을 기반으로 SQL 쿼리 기능 제공
- 이 경우 S3를 데이터 레이크라고 볼 수 있음
Redshift ML
- SQL만을 사용해 머신러닝 모델을 훈련하고 사용할 수 있게 하는 Redshift 기능
- AWS SageMaker에 의해 지원
- SageMaker은 Auto Pilot이라는 자동으로 최적화된 모델을 생상해주는 기능 제공
- 이미 모델이 존재한다면 이를 사용하는 것도 가능(BYOM: Bring Your Own Model)
Redshift Spectrum으로 S3 외부 테이블 조작
Fact 테이블과 Dimension 테이블
Fact 테이블
- 분석의 초점이 되는 양적 정보를 포함하는 중앙 테이블
- 매출 수익, 판매량 또는 이익과 같은 사실/측정 항목을 포함하여 비즈니스 결정에 사용
- 일반적으로 Foreign Key를 통해 여러 Dimension 테이블과 연결됨
- 보통 Fact 테이블의 크기가 훨씬 더 큼
- Fact 테이블 예시:
- 앞에서 다루었던 user_session_channel
- Order 테이블: 사용자들의 상품 주문에 대한 정보가 들어있는 테이블
Dimension 테이블
- Fact 테이블에 대한 상세 정보를 제공하는 테이블
- 고객, 제품과 같은 테이블로 Fact 테이블에 대한 상세 정보 제공
- Fact 테이블 데이터에 맥락을 제공하여 사용자가 다양한 방식으로 데이터를 조각내고 분석 가능하게 함
- 일반적으로 Primary Key를 가지며, Fact 테이블의 Foreign Key에서 참조됨
- 보통 Dimension 테이블의 크기가 훨씬 더 작음
- Dimension 테이블 예시: 사용자나 채널에 대한 정보로 상대적으로 크기가 작음
- 앞에서 다루었던 user_session_channel 테이블에 사용된 사용자나 채널에 대한 정보
- user 테이블
- channel 테이블
- Order 테이블에 사용된 상품, 상품 주문자에 대한 정보
- Product 테이블: Order 테이블에 사용된 상품 정보
- User 테이블: Order 테이블의 상품 주문자에 대한 정보
- 앞에서 다루었던 user_session_channel 테이블에 사용된 사용자나 채널에 대한 정보
Redshift Spectrum 사용 유스 케이스
- S3에 대용량 Fact 테이블이 파일(들)로 존재
- Redshift에 소규모 Dimension 테이블이 존재
- Fact 테이블을 Redshift로 적재하지 않고 위의 두 테이블을 조인하고자 할 때
외부 테이블(External Table)
- 데이터베이스 엔진이 외부에 저장된 데이터를 마치 내부 테이블처럼 사용하는 방법
- 외부 테이블은 외부(S3와 같은 클라우드 스토리지)에 저장된 대량의 데이터를 데이터베이스 내부로 복사하고 쓰는 것이 아닌 임시 목적으로 사용하는 방식
- SQL 명령어로 데이터베이스에 외부 테이블 생성 가능
- 이 경우 데이터를 새로 만드는 것이 아닌 참조만 함
- 외부 테이블은 CSV, JSON, XML과 같은 파일 형식 뿐만 아니라 ODBC/JDBC 드라이버를 통해 액세스하는 원격 데이터베이스와 같은 다양한 데이터 소스에 대해 사용 가능
- 외부 테이블을 사용하여 데이터 처리 후 결과를 데이터베이스에 적재하는데 사용 가능
- 예를 들어, 외부 테이블을 사용하여 로그 파일을 읽고 정제된 내용을 데이터베이스 테이블에 적재 가능
- 외부 테이블은 보안 및 성능 문제에 대해 신중한 고려가 필요함
- Hive등에서 처음 시작한 개념으로 이제는 대부분의 빅데이터 시스템에서 지원
Redshift Spectrum 실습: 외부 테이블 용 스키마 설정
- IAM: redshift.read.s3 ROLE에 AWSGlueConsoleFullAccess 권한 지정 필요
- SQL 실행하여 외부 테이블용 스키마 생성
CREATE EXTERNAL SCHEMA external_schema
FROM DATA catalog
DATABASE 'myspectrum_db'
iam_role 'arn:aws:iam::******:role/redshift.read.s3'
CREATE EXTERNAL DATABASE IF NOT EXISTS;
AWS Glue
- AWS의 Serverless ETL 서비스로 다음과 같은 기능 제공
- 데이터 카탈로그(AWS Glue Data Catalog)
- 데이터 소스 및 대상의 메타데이터를 대상으로 검색 기능 제공
- 이는 주로 S3나 다른 AWS 서비스 상의 데이터 소스를 대상으로 함(Redshift Spectrum의 경우에는 외부 테이블)
- ETL 작업 생성(AWS Glue Studio)
- 간단한 드래그 앤 드롭 인터페이스를 통해 ETL 작업 생성 가능
- 사용자는 데이터 소스 및 대상을 선태갛고 데이터 변환 단계를 정의하는 스크립트 생성
- 작업 모니터링 및 로그
- AWS Glue 콘솔을 통해 사용자는 ETL 작업의 실행 상태 및 로그를 모니터링 가능
- 서버리스 실행
- AWS Glue는 서버리스 아키텍처를 사용하므로 사용자는 작업을 실행하는 데 필요한 인프라를 관리할 필요가 없음(Auto Scaling)
- 데이터 카탈로그(AWS Glue Data Catalog)
Redshift Spectrum 실습: 외부 Fact 테이블 정의
- S3에 usc라는 폴더를 버킷 아래에 생성 후 user_session_channel.csv 파일 복사
- S3://jiwon-test-bucket/usc/user_session_channel.csv
- SQL 실행하여 외부 테이블 생성
- 이런 형태의 명령은 Hive/Presto/SparkSQL에서 사용됨
--schema 생성과 동시에 데이터 로딩
CREATE EXTERNAL TABLE external_schema.user_session_channel(
userid integer,
sessionid varchar(32),
channel varchar(32)
)
row format delimited
fields terminated by ','
stored as textfile
location 's3://jiwon-test-bucket/usc/';
Redshift Spectrum 실습: 내부 Dimension 테이블 정의
- 테스트를 위해 user 테이블을 하나 raw_data 스키마 아래에 생성
--Dimension Table 생성
CREATE TABLE raw_data.user_property AS
SELECT
userid,
CASE WHEN CAST (random() * 2 as int) = 0 THEN 'male' ELSE 'female' END gender,
(CAST(random()* 50 as int) + 18) age
FROM(
SELECT DISTINCT userid
FROM raw_data.user_session_channel
);
Redshift Spectrum 실습: Fact + Dimension 테이블 조인
SELECT gender, COUNT(1)
FROM external_schema.user_session_channel usc
JOIN raw_data.user_property up ON usc.userid = up.userid
GROUP BY 1;
Redshift ML 사용하기
머신러닝
- 학습이 가능한 기계(혹은 알고리즘)의 개발
- 데이터의 패턴을 흉내내는(imitation) 방식으로 학습
- 학습에 사용되는 데이터: training set
- 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
- 딥러닝(신경망의 다른 이름)은 머신 러닝의 일부
- 비전, 자연언어 처리(텍스트/오디오)등에 적용되고 있음
- 인공지능은 머신러닝을 포괄하는 개념
머신러닝 모델
- 머신러닝의 최종 산물(결과물)
- 학습된 패턴(training set)에 따라 예측 하는 블랙박스
- 선택한 머신러닝 학습 알고리즘에 따라 내부가 달라짐
- 디버깅이 쉽지 않으며, 동작하는 방식과 이유를 설명하기도 어려움
- training set 품질이 머신러닝 모델의 품질 결정
- 학습된 패턴(training set)에 따라 예측 하는 블랙박스
- 입력 데이터 기반으로 예측: 지도 머신러닝(Suprevised Machine Learning)
- 비지도 머신러닝(Unsupervised Machine Learning)
- 강화 학습(Reinforcement Learning)
- 머신러닝 트레이닝/빌딩
- 머신 러닝 모델을 만드는 것
- 입력은 training set
- 트레이닝 셋 예시: 타이타닉 호 승객 생존 여부 예측
Amazon SageMaker
- 머신러닝 모델 개발을 처음부터 끝까지 해결해주는 AWS 서비스
- MLOps 프레임 웍
- 크게 4가지 기능
- 트레이닝 셋 준비
- 모델 훈련
- 모델 검증
- 모델 배포와 관리
- API 엔드폳인트, 배치 서빙 등
- 다양한 머신러닝 프레임 웍을 지원함
- Tensorflow/Keras, Pytorch, MXNet 등
- 자체 SageMaker 모듈로 머신러닝 모델 훈련 가능
- SageMaker Studio라는 웹 기반 환경 제공(노트북)
- 다양한 개발 방식 지원
- Python Notebook(SageMaker 모듈)을 통해 모델 훈련
- 스칼라/자바 SDK도 제공
- AutoPilot이라는 코딩 필요 X 모델 훈련 기능 제공
- 코드도 생성해 줌
- Python Notebook(SageMaker 모듈)을 통해 모델 훈련
- 다른 클라우드 업체들도 비슷한 프레임 웍 제공
SageMaker의 AutoPilot
- SageMaker에서 제공되는 AutoML 기능
- AutoML: 모델 빌딩을 위한 훈련용 데이터 셋을 제공하면 자동으로 모델 생성해주는 기능
- 훈련용 데이터 셋을 입력하면 아래 내용 자동으로 수행
- 데이터 분석(EDA: Exploratory Data Analysis)을 수행하고, 이를 파이썬 노트북으로 만들어 줌
- 다수의 머신러닝 알고리즘과 하이퍼 파라미터의 조합에 대해 다음의 작업 수행
- 머신 러닝 모델을 생성, 훈련 및 테스트하고 테스트 결과 기록
- 선택 옵션에 따라 모델 테스트까지 전부 수행하기도 하지만 코드를 만드는 단계(노트북)로 종료 가능
- Auto Pilot 기능을 통해 모델 개발 속도를 단축하기 가능
- 최종적으로 사용자가 모델 선택 후 API로 만들기 가능
- 로그 설정 가능(전체 로깅/샘플 로깅 설정 가능)
Redshift 중지/제거하기
Redshift 유지보수
- Redshift 서비스는 주기적으로 버전 업그레이드를 위해 중단됨
- Maintenance window
- Serverless에는 존재하지 않음
VACUUM 명령: 테이블 청소와 최적화
- 테이블 데이터 정렬
- Redshift 테이블에 데이터 삽입, 업데이트, 삭제될 때 데이터는 불규칙하게 분산되어 저장됨
- VACUUM 명령어: 데이터를 정렬하여 남아 있는 행을 모아 쿼리 실행 시 검색해야 할 블록 수를 줄이는 작업 수행
- 디스크 공간 해제
- 테이블에서 행이 삭제되면 디스크 공간이 즉시 해제되지 않음
- VACUUM 명령어는 더 이상 필요하지 않은 행을 제거하고 사용한 디스크 공간 해제
- 삭제된 행에서 공간 회수
- 테이블에서 행이 삭제되면 VACUUM 명령 실행 전까지 공간 회수되지 않음
- 테이블 통계 업데이트
- VACUUM은 테이블 통계를 업데이트하여 Query Planner가 쿼리 최적화 지원
- 큰 테이블에 대한 VACUUM 명령은 리소스를 많이 잡아먹음
- 바쁘지 않을 때 실행하는 것이 좋음
(고정비용) Redshift 클러스터 중지 및 재실행
- Redshift 중지
- Redshift가 당분간 필요 없을 때
- Redshift 콘솔에서 해당 Redshift 클러스터를 선택하고 상단 메뉴에서 Stop 선택
- 이 경우 Redshift 클러스터의 스토리지 비용만 부담
- SQL 실행은 불가능
- Redshift 재실행
- Redshift가 다시 필요할 때
- 상단 메뉴에서 Resume 선택
(고정비용) Redshift 클러스터 삭제
- Redshift 영구 삭제
- Redshift 콘솔에서 삭제할 클러스터 선택하고 상단 메뉴에서 Delete 선택
- 이때, 데이터베이스 내용을 S3로 진행할지 여부 선택 가능
- 이 S3 백업으로부터 Redshift 클러스터를 나중에 새로 설치 가능
(가변비용) Redshift Serverless 삭제
- 모든 Workgroup 삭제
- 모든 Namespace들 삭제
공부하며 느낀점
Redshift 관련 기타 서비스에 관해 알아보았다. 그중 S3의 파일 내용을 Redshift에 적재하지 않고 외부 테이블로 이용할 수 있다는 점에서 굉장한 편의를 제공하는 Redshift Spectrum이 가장 인상 깊다.
반응형
'데브코스(DE) > 데이터 웨어하우스 관리와 고급 SQL, BI 대시보드' 카테고리의 다른 글
05. 대시보드 소개와 구현 (0) | 2024.05.12 |
---|---|
04. Snowflake 운영과 관리 (0) | 2024.05.12 |
02. Redshift 소개와 기능 (0) | 2024.05.07 |
01. 다양한 데이터 웨어하우스 옵션, ETL/ELT, 데이터 조직 (0) | 2024.05.07 |