Redshift 소개
What is Data Engineering?
Introduction
모든 서비스에 대해서 리텐션이 좋은가, 가장 돈을 많이 쓰는 사람들은 누구인가를 알아야 함
돈을 많은 쓰는 사람들이 얼마나 재방문하나, 언제 이탈하나
내가 어떤 가정을 하고 있는가, 전제에 대한 의심 등을 해봐야 함
Data Engineer?
- Managing Data Warehouse
- Writing and Managing Data Pipelines
- Types of data pipeline
- batch, streaming
- summary data generation : 이미 적재한 데이터를 조인해서 새로운 데이터를 만들어내는 (etl이 바깥에 있는 데이터를 가져오는 느낌이라념 elt는 내부, dbt 툴을 쓰는 analytics engineer)
- elt는 주로 데이터분석가가 함. 엔지니어는 보통 etl 외부에서 가져오는 데이터 담당. 가져오는 데이터를 잘 모름. 다른 팀에서 요청하면 가져와주는 느낌. 데이터 웨어하우스 안에서 분석하기 쉽게 데이터를 만드는 것은 분석가, elt. 데이터 시스템 안에 있는 데이터에 대해서 잘 아는 것은 보통 데이터 분석가. 데이터 엔지니어는 잘 모름. 데이터 엔지니어는 데이터 요청을 하면 외부에서 복사해서 가져와주고 신뢰성 체크해주는 느낌. 물론 데이터 파이프라인이 엄청 많으면 누가 요청해줬는지, 왜 필요한지 등에 대해서 잘 알고 정리할 필요가 있음 (데이터 카탈로그 - 테이블이 있으면 소스는 뭐고 누가 요청했고 이걸로 만들어진 내부 데이터는 무엇이고)
- event collection
- user’s behavioral data
- 데이터 엔지니어가 알아야 하는 기술?
- sql: hive, presto, sparksql
- language: python
- etl/elt scheduler: airflow
- large scale computing platform: spark/yarn
- cloud computing: AWS
- container Technology: k8s, docker
What is Data Warehouse?
Data Warehouse: a separate SQL database
- 분석 전용 데이터베이스 (a separate SQL database)
- 프로덕션 데이터베이스는 보통 mysql, postgres db. 서비스 운영에 필수적인 정보를 담는 디비
- 용량이 적고, 속도가 중요함. 따라서 여기에 쿼리를 날리면 느려지거나 사고가 터짐
- 좀 느려도 괜춘. 많은 데이터를 한 번에 분석할 수 있음 좋음.
- 작은 회사에 적은 데이터면 굳이 클라우드까지 갈 필요없음 (블라인드의 경우 최근까지 mysql을 썼음)
- 프로덕션 데이터베이스는 보통 mysql, postgres db. 서비스 운영에 필수적인 정보를 담는 디비
Central data storage of your company
- 데이터 웨어하우스가 데이터 조직의 시작점이 되어야 함!
- 외부에서 데이터를 수집하고, 변환해서 적재하는 과정이 ETL
- 하지만 데이터가 많아지면 이를 다 이해하고 작업하는 것은 불가능해짐. 적재된 데이터를 조합하여 분석하기 용이하게 새로운 데이터를 만드는 과정을 ELT
- fixed cost option vs variable cost option
- 보통 후자가 스케일러블함. 후자의 예시는 스노우플레이크, 빅쿼리
- 이상한 쿼리 날리는 순간… 참사…
- 전자의 대표가 redshift나 온프렘 데이터 웨어하우스.
- 페타바이트가 아닌 이상 redshift로 충분.
- 고정비용이라는 것은 예측가능하다는 것도 있음. 예산 집행이 편리.
- 스케일 관리를 사용자가 해야 한다는 불편함이 존재.
- 보통 후자가 스케일러블함. 후자의 예시는 스노우플레이크, 빅쿼리
Redshift Introduction
Redshift, Scalable SQL Engine (Data Warehouse) in AWS
- 사용자가 이용하는 백엔드로 사용하면 안 됨. 데이터 웨어하우스의 엔진은 처리데이터의 크기에 방점이 있는 것이지 속도에 방점이 있는 것이 아님.
- 컬럼으로 나눠서 저장함. 열지향인듯? 컬럼 추가나 삭제가 편리. 레코드 단위가 아니라 컬럼 (대부분 scalable한 데이터베이스는 열지향이 많음)
- bulk-update: sql에 insert into가 아니라 (건 바이 건이 아니라) 파일 단위로 업로드 하는 것. csv, json과 같은 텍스트 포맷도 있지만 주로 파케이 같은 바이너리 형태로 벌크 업데이트 함.
- 고정 용량 SQL 엔진이지만 최근 Redshift Serverless라고 하여 가변비용 옵션도 추가되긴 하였음
- 모든 데이터 웨어하우스는 PK의 유니크함을 보장해주지 않음. 어떤 테이블의 PK가 유니크하다는 것을 보장하는 것은 엔진이 아닌 데이터 엔지니어와 데이터 분석가의 몫
💡 데이터 웨어하우스와 PK의 Uniqueness
|
- Postgresql 8.x과 호환이 가능함 ⇒ 지원하는 거의 모든 클라이언트 툴 (JDBC ODBC) 사용 가능
- 완전히 호환되는 것은 아니나 많은 부분 postgreSQL문을 지원함
- postgresql에 있는 데이터타입 일부를 지원함 (JSON 형식 없음, 크기에 제약이 있음)
💡 JDBC ODBC
그럼 JDBC는 ORM과 무엇이 다른가…? : https://www.youtube.com/watch?v=mezbxKGu68Y |
Redshift Optimization can be tricky
- 서버의 수가 늘어남에 따라 레코드를 분산해줘야 하는 상황이 발생함. 하지만 이것을 개발자가 직접 해줘야 한다는 것이 가장 큰 단점. (Redshift Serverless를 쓰면 물론 해결이 됨)
- 멀티노드 클러스터가 되는 순간 data skew가 발생할 수 있음: 데이터가 하나의 노드에 몰리는 현상 발생. 그 노드가 병목이 되면서 속도가 느려짐
- Redshift도 AWS 서비스이다보니 다른 AWS 서비스들과 잘 연동 됨.
- S3에 백업을 할 수도 있는데 이를 스냅샷이라고 부름.
- python based UDF(User Defined Function)를 지원함
- S3에 로그 등을 적재하고 아테나로 분석한 뒤에 쓸만한 형태로 변환하여 Redshift에 적재하기 (일종의 ELT 작업이라고 볼 수 있음)
- Athena와 Redshift Spectrum은 거의 똑같은 역할을 함
- Athena는 Presto를 AWS에서 커스텀에서 만든 것
💡 Presto & Athena Presto 사용자가 데이터나 명령을 입력할 수 있는 데이터 분석을 위한 분산 SQL 쿼리 엔진. 페이스북에서 많은 데이터를 빠르고 효율적으로 분석하기 위해 개발. Hive는 처리 중간 결과를 디스크에 저장하지만 Presto는 메모리에 저장하기 때문에 속도가 훨씬 빠름 (하지만 리소스를 더 많이 사용) Athena 표준 SQL을 사용해 AWS S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스. 서버리스 서비스이기 때문에 관리할 인프라가 없고, 실행한 쿼리에 대해서만 비용 지불 |
Bulk Update Sequence - COPY SQL
- 건 바이 건이 아니라 소스에서 S3에서 파일로 저장하고, 거기에서 Redshift 테이블로 한 큐에 넣는 것.
- 처음 넣는 것은 조금 느리지만 그 이후에는 훨씬 프로세스가 빠름
How to Access Redshift
Ways to Access Redshift
- 태블로, looker와 같은 시각화 툴
- JDBC, ODBC와 같은 라이브러리
- 파이썬에는 psycopg2로 조작 가능
- SQL Client
- Postico (mac), SQL Workbench, DBeaver, DataGrip (jetbrain)
- Python Notebook
- Colab
'Data Engineering' 카테고리의 다른 글
[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 - 3주차: Introduction to Airflow (0) | 2023.07.30 |
---|---|
[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 - 3주차: 데이터 파이프라인을 만들 때 고려해야 할 점 (0) | 2023.06.22 |
[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 - 3주차: 데이터 파이프라인이란? (1) | 2023.06.18 |
[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 2주차 - 빅데이터 세상에도 SQL은 중요할까? (0) | 2023.06.15 |
[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 1주차 - 데이터 팀 소개 (0) | 2023.06.09 |