모든 데이터 관련 직군에서 공통적으로 필요한 스킬이 바로 SQL이다. 다만 Front-end와 Back-end에서 SQL을 사용하는 것과 달리 데이터 관련 직군에서는
큰 데이터들을 프로세싱해서 작은 데이터로 요약하거나 데이터를 분석
하기 위해 SQL을 사용한다.
구조화
되어 있다. 관계형 데이터베이스는 이런 구조화된 데이터를 기반
으로 작업을 할 때는 가장 좋은 기술
이 된다.SQL
이다.엑셀 스프레드 시트 형태의 테이블(컬럼/열, 레코드/행)
로 데이터를 정의하고 저장테이블 스키마
를 정하고 테이블 스키마
에 맞춰서 레코드를 추가할 수 있음 📌 대표적 관계형 베이스는 어떤 것이 있는가?
- 프로덕션 데이터베이스 (OLTP: OnLine Transaction Processing)
- 웹 서비스나 모바일 앱과 바로 연동이 돼서
해당 서비스에 필요한 정보들을 저장 및 조회해 오는 데이터베이스
빠른 속도
가 매우 중요MySQL
,PostgreSQL
,Oracle
등
- 데이터 웨어하우스 (OLAP: OnLine Analytical Processing)
- 처리 데이터의 크기가 클 때 사용하며처리 데이터의 크기
에 집중
- 데이터 관련 직군의 사람들은 보통데이터웨어하우스
를 사용
데이터 분석하거나 데이터 모델링을 할 때 필요한 데이터를 저장
할 때 사용Redshift
,Snowflake
,BigQuery
,Hive
등
📌 프로덕션 데이터베이스만 사용하는 회사에서 데이터 직군이 겪는 어려움?
- 필요한 데이터를 사용하고자 할 때 SQL 실행을 통해 프로덕션 데이터베이스에 접근해야 하는데 이 데이터베이스가 실제 서비스와 연동되어 있기 때문에 큰 쿼리를 날려 데이터베이스가 느려지면 이것이 전체 서비스에 영향을 끼치게 된다.
- 그래서 데이터 직군을 위한
별도의 데이터 웨어하우스
가 필요하다.
2단계
로 구성된다.테이블
구조 (테이블 스키마라고 부름)테이블
은 레코드
들로 구성된다. (행)레코드
는 하나 이상의 필드(컬럼)
로 구성된다. (열)필드(컬럼)
는 이름
과 타입
, 속성(Primary key)
으로 구성된다. (Primary key
의 값은 유일해야 함.)테이블 구조
를 스키마
라고 한다. 환자 정보를 담는 테이블을 예시로 만들어 보았다. 이때 환자 번호
는 환자의 고유 값이 되기 때문에 해당 레코드를 구분해 주는 유일한 값
이 된다. 우리는 이를 Primary Key
로 설정해 줄 수 있다.1) SQL의 개념
Structured Query Language
테이블
을 질의
하거나 조작
할 수 있도록 해 주는 프로그래밍 언어
이다.DDL(Data Definition Language)
로 테이블의 구조를 정의하고, DML(Data Manipulation Language)
로 원하는 레코드를 조회하거나 추가, 삭제, 갱신할 수 있는 언어이다.빅데이터
세상에서도 중요하다.대용량 데이터 웨어하우스
는 SQL 기반
이다.Spark
나 Hadoop
도 예외는 아님. SparkSQL
과 Hive
라는 SQL 언어
가 지원됨.2) SQL의 단점
최적화
가 되어 있다.비구조화된 데이터
를 다루는 데 제약이 심함.Spark
, Hadoop
과 같은 분산 컴퓨팅 환경이 필요해짐. 1) Star schema
그림 출처: https://www.jamesserra.com/archive/2011/10/denormalizing-dimension-tables/
Production DB
에서 사용하는 방식이다.논리적 단위
에 따라 각각 테이블을 나누고, 필요 시 테이블을 조인한다.Denormalized schema
에서는 업데이트를 위해 이전 제품명을 모두 찾아 업데이트해 주어야 하는데 Star schema
에서는 Product 테이블에 해당되는 제품명만 수정하면 된다. 2) Denormalized schema
그림 출처: https://www.jamesserra.com/archive/2011/10/denormalizing-dimension-tables/
데이터 웨어하우스
에서 사용하는 방식이다. 왜냐하면 데이터 웨어하우스는 스토리지 크기의 제약이 없기 때문이다.빠른 계산이 가능
하다.프로덕션 데이터베이스와는 별도
Redshift
, Google Cloud의 Big Query
,Snowflake
등이 있다. Redshift
는 고정 비용 옵션이고 Big Query
와 Snowflake
는 가변 비용 옵션이다.Big Query
와 Snowflake
가 더 대용량 데이터를 다루는 데 적합하다.모든 데이터
들을 저장내부 직원(데이터 팀원)
을 위한 데이터베이스 처리 데이터의 크기가 중요
하다.📌 데이터 인프라란?
데이터 엔지니어
가 관리한다.ETL
과데이터 웨어하우스
를 포함한 것을 말하며 이 단계에서 한 단계 발전하면Spark와 같은 대용량 분산 처리 시스템
이 일부 추가된다.- 데이터 인프라는 데이터 팀의 업무에 시작 단계에 해당한다.
컴퓨팅 자원
을 네트워크
를 통해 서비스 형태
로 사용하는 것No Provisioning
Pay As You Go
데이터 센터 공간
을 직접 확보해야 함. Peak Time
기준으로 Capacity Planning
을 해야 함.기회 비용
이 생김.기회 비용
측면에서 굉장한 이점이 생김.글로벌 확장
에 용이함. (대부분의 클라우드 프로그램이 전세계에 데이터 센터가 존재하기 때문에)Managed Service (SaaS)
이용.* EC2 - Elastic Compute Cloud
On Demand
: 시간당 비용이 지불되며 가장 흔히 사용하는 옵션Reserved
: 1년이나 3년간 사용 보장하고 40 %의 할인을 받는 옵션Spot Instance
: 일종의 경매 방식으로 놀고 있는 리소스
들을 더 저렴한 비용으로 사용할 수 있는 옵션 -> 문제는 어느 순간이라도 더 높은 가격에 경매한 사람이 있다면 그 사람에게 서버가 모두 넘어가게 된다. * S3 - Simple Storage Service
* 기타 중요 서비스 - Database Services
RDS (Relational Database Service)
: MySQL, PostgreSQL, Aurora, Oracle, MS SQL ServerDynamoDB
RedShift
ElasticCache
Neptune (Graph Database)
ElasticSearch
MongoDB
* 기타 중요 서비스 - AI & ML Services
SageMaker
: 머신 러닝과 딥러닝 End-to-End FrameworkLex
: Conversational Interface (챗봇) Polly
: Text to Speech Rekognition
: Image Recognition * 기타 중요 서비스
Cloud Function
서비스가 있음.Scalable SQL 엔진
OLAP(OnLine Analytical Processing)
벌크 업데이트
를 지원한다. 레코드가 들어 있는 파일을 S3로 복사 후 copy command
로 Redshift로 일괄 복사고정 용량/비용 SQL 엔진
primary key uniqueness
를 보장하지 않는다. 데이터 웨어하우스에서 보장해 주지는 않고 개발자가 보장해 주어야 한다.Postgresql 8.x
와 SQL이 호환됨. 모든 기능을 지원하지는 않고, Postgresql
에서 지원하는 툴이나 라이브러리도 접근이 가능하다.
Redshift Schema
구성
1.raw_data
: 가공하지 않은 외부에서 가지고 온 데이터, 날것의 데이터를 담는 테이블.
2.analytics
: 분석용 데이터를 담는 테이블.
3.adhoc
: 테스트를 위한 테이블. 따로 관리자가 존재하지 않음.-- schema를 선언하는 쿼리 CREATE SCHEMA raw_data; CREATE SCHEMA analytics; CREATE SCHEMA adhoc;
1.
DATABASE(데이터베이스)
과Schema(스키마)
의 차이
- 이 부분은
DBMS
마다 의미가 다르다.- 보통 데이터베이스의 계층이 3 계층이냐, 4 계층이냐에 따라서 이 개념이 달라지는 것으로 보인다.
- 먼저 3 계층인 경우
DATABASE
가 따로 존재하지 않으며 스키마와 데이터베이스를 동의어로 취급한다.MySQL
이 이와 같은 경우에 해당한다.
- 4 계층의 경우 다음과 같은 구조가 되는데 이때는
DATABASE
가스키마
의 상위 개념이 된다.ANSI
가 정한 표준SQL
에서는 4 계층으로 정의를 하는 것이 맞으며 이 구조를 충실하게 지킨 것이PostegreSQL
,MSSQL(SQL Server)
이다.Oracle
역시 4 계층으로 이루어져 다음과 같은 개념이 적용이 되지만인스턴스 아래에 데이터베이스를 한 개만 만들 수 있다
는 제약이 있다.
2.
벌크 업데이트(Bulk Update)
란?
- 대용랑의 데이터를 업데이트하는 빠른 방식
- 데이터의 한 건씩을 넣는 게 아니라 파일 전체를 Insert 해서 빠르게 수행이 가능
SQL 쿼리
로벌크 업데이트
를 작성하면 다음과 같이 작성할 수 있다.-- 1. 원본 테이블과 똑같은 임의의 테이블 생성 -- ORD_TABLE이 원본 테이블이며 TMP_TABLE이 원본 테이블을 복사할 임의 테이블이 된다. CREATE TEMPORARY TABLE TMP_TABLE LIKE ORG_TABLE -- 2. 임시 테이블에 모든 데이터를 저장 INSERT TMP_TABLE VALUES (DATA들); -- 3. 원본 테이블 BULK UPDATE UPDATE ORG_TABLE O INNER JOIN TMP_TABLE T ON O.COL1 = T.COL1 OR O.COL2 = T.COL2; -- 4. 임시 테이블 삭제 DROP TEMPORARY TABLE TMP_TABLE;