주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 TIL 22일차 본문

데브코스

데이터 엔지니어링 TIL 22일차

우솨 2024. 4. 23. 17:20

학습 내용

관계형 데이터베이스 예제

사용자 ID : 보통 웹서비스에서는 등록된 사용자마다 부여하는 유일한 ID
세션 ID : 세션마다 부여되는 ID
세션 : 사용자의 방문을 논리적인 단위로 나눈 것
- 사용자가 외부링크를 타고 오거나 직접 방문해서 올 경우 세션을 새성
- 사용자가 방문 후 30분간 interaction이 없다가 뭔가를 하는 경우 새로 세션을 생성
=> 하나의 사용자가 여러개의 세션을 가질 수 있다.
- 보통 세션의 경우 세션을 만들어낸 접점을 채널이란 이름으로 기록을 해둠, 세션이 생긴 시간도 같이 기록.

SQL의 기본
다수의 SQL문을 실행시 세미콜론(;)으로 분리가 필요

SQL주석
-- : 인라인 한줄짜리 주석, 자바에서 //에 해당
/*--*/ : 여러 줄에 걸쳐 사용 가능한 주석
팀 작업시 테이블/필드이름의 명명규칙을 정하는 것이 중요
_ vs CamelCasing
ex) user_session_channel vs UserSessionChannel

SQL


DDL - 테이블 구조 정의언어
CREATE TABLE : 테이블 생성
- CTAS : CREATE TABLE table_name AS SELECT (create table과 insert into를 같이 사용)
- DROP TABLE : 없는 테이블을 삭제하려할 시 에러가남 - 테이블자체를 삭제함
- DROP TABLE IF EXISTS table_name; : 테이블이 존재하지 않아도 에러메세지 없음
- DELETE FROM 조건에 맞는 레코드들을 지움(테이블 자체는 존재함)
ALTER TABLE : 컬럼 변경
- ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입 : 새로운 컬럼추가
- ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드타입 : 기존컬럼 이름 변경
- ALTER TABLE 테이블이름 DROP COLUMN 필드이름 : 기존 컬럼 제거
- ALTER TABLE 현재테이블이름 RENAME 새테이블이름 : 테이블 이름 변경


DML - 테이블 데이터 조작 언어(레코드 수정언어)
- INSERT INTO : 테이블에 레코드 추가(시간이 오래 걸려 COPY사용)
- UPDATE FROM : 테이블 레코드의 필드 값 수정
- DELETE FROM, TRUNCATE : 테이블에서 레코드 삭제
SELECT : 레코드 질의언어
- SELECT FROM : 테이블에서 레코드와 필드를 읽어옴
- WHERE을 사용해 레코드선택 조건을 지정
- GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용하기도 함
-- DAU, WAU, MAU 계산에 사용
- ORDER BY를 사용해 레코드 순서를 결정

SELECT
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름 [ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능
LIMIT N;

CASE WHEN
필드 값의 변환을 위해 사용 가능
CASE WHEN 조건 THEN 참 일때 값 ELSE 거짓일때 값 END 필드이름

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인지 아닌지 비교는 특수한 문법을 필요로 한다.
-- field 1 is NULL 혹은 field1 is not NULL
- NULL에 사칙연산을 적용하면 NULL값이 나온다.

WHERE
IN - 안에 있음
WHERE channel in ('Google', 'Youtube')
WHERE channel = 'Google' OR channel = 'Youtube'
NOT IN - 안에 없음

LIKE and ILIKE
LIKE  : 대소문자 구분
ILIKE : 대소문자 구분 X
WHERE channel LIKE 'G%' -> 'G*'
WHERE channel LIKE '%0%' -> '*o*'
NOT LIKE or NOT ILIKE
· BETWEEN
Used for date range matching
위의 오퍼레이터들은 CASE WHEN 사이에서도 사용가능

ODER BY
오름차순, 내림차순을 정함
NULL값들은 오름차순일경우 마지막에 위치,
NULL값들은 내림차순일경우 처음에 위치.
NULLS FIRST 혹은 NULLS LAST를 사용하여 위치 변경 가능