
- 실습 DB 설명
- SQL 기본
AWS Redshift를 이용한 데이터 웨어하우스 실습을 진행하기 앞서 실습에서 사용할 관계형 DB의 테이블에 대해 설명하려고 한다.
먼저 우리가 사용할 DB에는 웹서비스 사용자/세션 정보를 포함한다.

우리가 사용할 raw_data 데이터베이스(스키마)의 테이블 구성은 다음과 같다.

실제 레코드의 예시를 보면 다음과 같은 형식으로 channel 에는 어떠한 경유지를 거쳐왔는지를 표시한다.

이 정보를 기반으로 다양한 데이터 분석과 지표 설정이 가능하다. 예를들어
SQL을 이용한 실습을 진행하기 전 SQL의 기본적인 규칙을 알아보자.
-- : 인라인 한줄짜리 주석./* -- */ : 여러 줄에 걸쳐 사용 가능한 주석user vs Users)user_session_channel vs UserSessionChannel)
테이블 구조를 정의하는 언어
1.CREATE TABLE : 테이블을 새로 정의하는 명령어, Primary key 속성을 지정할 수 있으나 무시된다.
SELECT 문의 출력을 기반으로 새 테이블을 만드는 병렬 연산. 단일 명령을 사용하여 데이터를 만들고 테이블에 삽입하는 가장 간단하고 빠른 방법CREATE TABLE table_name AS SELECT ...
CREATE TABLE raw_cata.user_session_channel (
userid int,
sessionid varchar(32) primary key,
channel varchar(32)
);
2.DROP TABLE : 테이블을 삭제 하는 명령어. 없는 테이블을 지우려고 하는 경우 에러를 내기 때문에 IF EXISTS를 붙여서 사용한다.
DROP TABLE IF EXISTS table_name;
3.ALTER TABLE : 테이블의 구조를 변경하는 명령어.
ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
ALTER TABLE 테이블이름 RENAME 현재필드이름 TO 새로운필드이름;
ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
ALTER TABLE 현재테이블이름 RENAME TO 새로운테이블이름;
SELECT : 레코드 질의 언어, 조건을 설정하여 내가 원하는 레코드를 읽어올 수 있다.
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름[DESC/ASC] -- 필드이름 대신에 숫자 사용 가능
LIMIT N;
INSERT INTO : 레코드 추가
UPDATE FROM : 레코드 수정
DELETE FROM : 레코드 삭제
CASE WHEN : 필드 값의 변환을 위해 사용 가능한 명령어CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END 필드이름
SELECT CASE
WHEN channel in ('Facebook', 'Instagram') THEN 'Social-Media'
WHEN channel in ('Google', 'Naver') THEN 'Search-Engine'
ELSE 'Something-Else'
END channel_type
FROM raw_data.user_session_channel;
NULL이란?
값이 존재하지 않음을 나타내는 상수로 0 혹은 ""과는 다르다. 필드 지정 시 값이 없는 경우 NULL로 지정이 가능하다.
어떤 필드의 값이 NULL인지 아닌지 비교는 특수한 문법을 필요로 함 ex) field1 is NULL 혹은 field1 is not NULL
COUNT() 함수
SQL에서 COUNT() 함수의 인자는 NULL 값과 NULL이 아닌 값으로 구분된다. COUNT 함수의 제대로된 이해를 위해 다음과 같은 예시를 풀어보자.

COUNT() 함수의 인자로 들어간 값과 출력값의 연관성을 이해하는데 조금 시간이 걸렸다.