RDBS
구조화된 데이터를 저장하고 질의 할 수 있도록 해주는 스토리지
- 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
- 테이블에는 컬럼(열)과 레코드(행)이 존재
관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
- 테이블 정의를 위한 DDL(Data Definition Language)
- 앞서 보여준 테이블의 포맷을 정의해주는 언어
- 테이블 데이터 조작/질의를 위한 DML(Data Manipulation Language)
- DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제 혹은 읽어들이기 위해 사용하는 언어
대표적 관계형 데이터베이스
프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle …
- OLTP(OnLine Transaction Processing)
- 빠른 속도에 집중. 서비스에 필요한 정보 저장
- MySQL이 바로 우리의 집중 탐구 대상
데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive, …
- OLAP(OnLine Analytical Processing)
- 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩들을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
관계형데이터베이스 구조
관계형 데이터베이스는 2단계로 구성됨
- 가장 밑단에는 테이블들이 존재(테이블은 엑셀의 시트에 해당)
- 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성(엑셀에서는 파일)
테이블의 구조(테이블 스키마라고 부르기도 함)
- 테이블은 레코드들로 구성(행)
- 레코드는 하나 이상의 필드(컬럼)로 구성(열)
- 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성됨
테이블 자체의 format을 잡아주는 테이블을 DDL
DML은 DDL에 레코드를 추가 삭제 변경하는 것
SQL: Structured Query Language
- 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어
SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어
두 종류의 언어로 구성됨
- DDL(Data Definition Language):
- 테이블의 구조를 정의하는 언어
- DML(Data Manipulation Language):
- 테이블에서 원하는 레코드들을 읽어오는 질의 언어
- 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
SQL은 빅데이터 세상에서 중요
구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰임
모든 대용량 데이터 웨어하우스는 SQL기반
- Redshift, Snowflake, BigQuery, Hive
Spark이나 Hadoop도 예외는 아님
- SparkSQL과 Hive라는 SQL언어가 지원됨
백엔드/프런트엔드/데이터 분야에서 반드시 필요한 기본 기술
SQL의 단점
구조화된 데이터를 다루는데 최적화가 되어있음
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원함(no nested like JSON)
- 구글 빅쿼리는 nested strucuture를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
관계형 데이터베이스마다 SQL문법이 조금씩 상이
Star schema
production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
데이터를 논리적 단위로 나눠 저장하고 필요시 조인
스토리지의 낭비가 덜하고 업데이트가 쉬움
Denormalized schema
NoSQL이나 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태를 말함
이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능
SQL기본
먼저 다수의 SQL문을 실행한다면 세미콜론으로 분리 필요
- SQL문1; SQL문2;SQL문3;
SQL주석
- —:인라인 한줄짜리 주석. 자바에서 //에 해당
- /—/:여러 줄에 걸쳐 사용 가능한 주석
SQL키워드는 대문자를 사용한다던지 하는 나름대로의 포맷팅이 필요
- 팀 프로젝트라면 팀에서 사용하는 공통 포맷이 필요
테이블/필드이름의 명명규칙을 정하는 것이 중요
- 단수형 vs 복수형
- User vs Users
- _ vs CamelCasing
- user_session_channel vs UserSession Channel
SQL DDL - 테이블 구조 정의 언어
CREATE TABLE
Primary key 속성을 지정할 수 있음
- Primary key uniqueness: 유일키 보장
- 성능향상을 위해 인덱스를 지정할 수 있음
CREATE TABLE raw_data.user_session_channel(
userId int,
sessionId varchar(32) primary key,
channel varchar(32)
);
raw_data라는 폴더안에 user_session_channel이라는 테이블을 생성
DROP TABLE
- DROP TABLE table_name;
- 없는 테이블을 지우려고 하는 경우 에러를 냄
- DROP TABLE IF EXISTS table_name;
- vs. DELETE FROM
- DELETE FROM은 조건에 맞는 레코드들을 지움(테이블 자체는 존재)
ALTER TABLE
- 새로운 칼럼 추가:
- ALTER TABLE 테이블 이름 ADD COLUMN 필드이름 필드타입;
- 기존 컬럼 이름 변경:
- ALTER TABLE 테이블 이름 RENAME 현재필드이름 to 새필드이름
- 기존 컬럼 제거:
- ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
- 테이블 이름 변경:
- ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;
SQL DML - 테이블 데이터 조작언어
레코드 질의 언어:SELECT
- 뒤에서 더 자세히 설명
- SELECT FROM: 테이블에서 레코드와 필드를 읽어오는데 사용
- WHERE를 사용해서 레코드 선택 조건을 지정
- GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용하기도 함
- DAU, WAU, MAU 계산은 GROUP BY를 필요로 함
- ORDER BY를 사용해서 레코드 순서를 결정하기도 함
- 보통 다수의 테이블을 조인해서 사용하기도 함.
레코드 추가/삭제/수정 언어:
- INSERT INTO: 테이블에 레코드를 추가하는데 사용
- UPDATE FROM:테이블 레코드의 필드 값 수정
- DELETE FROM:테이블에서 레코드를 삭제
- vs. TRUNCATE:테이블에서 모든 레코드 삭제
- 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어
- DDL(Data Definition Language):
- 테이블의 구조를 정의하는 언어
- DML(Data Manipulation Language):
- 테이블에서 원하는 레코드들을 읽어오는 질의 언어
- 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
- Redshift, Snowflake, BigQuery, Hive
- SparkSQL과 Hive라는 SQL언어가 지원됨
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원함(no nested like JSON)
- 구글 빅쿼리는 nested strucuture를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태를 말함
- SQL문1; SQL문2;SQL문3;
- —:인라인 한줄짜리 주석. 자바에서 //에 해당
- /*—*/:여러 줄에 걸쳐 사용 가능한 주석
- 팀 프로젝트라면 팀에서 사용하는 공통 포맷이 필요
- 단수형 vs 복수형
- User vs Users
- _ vs CamelCasing
- user_session_channel vs UserSession Channel
- Primary key uniqueness: 유일키 보장
- 성능향상을 위해 인덱스를 지정할 수 있음
raw_data라는 폴더안에 user_session_channel이라는 테이블을 생성CREATE TABLE raw_data.user_session_channel( userId int, sessionId varchar(32) primary key, channel varchar(32) );
- DROP TABLE table_name;
- 없는 테이블을 지우려고 하는 경우 에러를 냄
- DROP TABLE IF EXISTS table_name;
- vs. DELETE FROM
- DELETE FROM은 조건에 맞는 레코드들을 지움(테이블 자체는 존재)
- 새로운 칼럼 추가:
- ALTER TABLE 테이블 이름 ADD COLUMN 필드이름 필드타입;
- 기존 컬럼 이름 변경:
- ALTER TABLE 테이블 이름 RENAME 현재필드이름 to 새필드이름
- 기존 컬럼 제거:
- ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
- 테이블 이름 변경:
- ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;
- 뒤에서 더 자세히 설명
- SELECT FROM: 테이블에서 레코드와 필드를 읽어오는데 사용
- WHERE를 사용해서 레코드 선택 조건을 지정
- GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용하기도 함
- DAU, WAU, MAU 계산은 GROUP BY를 필요로 함
- ORDER BY를 사용해서 레코드 순서를 결정하기도 함
- 보통 다수의 테이블을 조인해서 사용하기도 함.
- INSERT INTO: 테이블에 레코드를 추가하는데 사용
- UPDATE FROM:테이블 레코드의 필드 값 수정
- DELETE FROM:테이블에서 레코드를 삭제
- vs. TRUNCATE:테이블에서 모든 레코드 삭제
- vs. TRUNCATE:테이블에서 모든 레코드 삭제
'모각코' 카테고리의 다른 글
절개와 지조 5차 모각코 (0) | 2023.07.20 |
---|---|
절개와 지조 4차 모각코 (0) | 2023.07.16 |
절개와 지조 2차 모각코 (0) | 2023.07.08 |
절개와지조 1차 모각코 (0) | 2023.07.06 |
눈이 녹으면 Spring-MVC 1월 31일 8회차 (0) | 2023.01.31 |