<들어가기에 앞서>
실습에 들어가기에 앞서 기억할 점(1)
현업에서 깨끗한 데이터란 존재하지 않는다
- 항상 데이터를 믿을 수 있는지 의심할 것(의疑데이터증...)
- 실제 레코드를 몇 개 살펴보는 것 만한 방법이 없다(노가다)
항상 데이터의 품질을 의심하고 체크하는 버릇이 필요
- 중복된 레코드들 체크
- 최근 데이터의 존재 여부 체크(freshness)
- Primary key uniqueness가 지켜지는지 체크
- 값이 비어있는 컬럼들이 있는지 체크
- 위의 체크는 코딩의 unit test 형태로 만들어 매번 쉽게 체크해볼 수 있다
실습에 들어가기에 앞서 기억할 점(2)
테이블(들)에서 레코드들(혹은 레코드 수)을 읽어오는데 사용하며, WHERE를 사용해 조건을 만족하는 레코드만 읽어올 수 있다.
SELECT 필드이름1, 필드이름2, ... -- *를 사용하면 모든 필드 선택
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름 [ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능
LIMIT N;
SELECT DISTINCT channel
FROM raw_data.user_session_channel;
SELECT channel, COUNT(1)
FROM raw_data.user_session_channel
GROUP BY 1; -- (ordinal 표현) SELECT문의 1번 필드로 GROUP BY 수행
SELECT COUNT(*)
FROM raw_data.user_session_channel;
SELECT channel, COUNT(1)
FROM raw_data.user_session_channel
WHERE channel = 'Facebook';
필드 값의 변환을 위해 사용하는 기능으로, 여러 조건을 사용하여 변환하는 것도 가능하다.
CASE WHEN 조건 THEN 참일 때 값 ELSE 거짓일 때 값 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;
IN and NOT IN
- WHERE channel IN ('Google', 'Youtube')
- WHERE channel = 'Google' OR channel = 'Youtube'
LIKE and ILIKE
- LIKE: 대소문자를 구분
- ILIKE: 대소문자를 구분하지 않음
- WHERE channel LIKE 'G%' (채널명이 G로 시작하는 채널)
- WHERE channel LIKE '%o%' (채널명에 o가 들어있는 채널)
- NOT LIKE or NOT ILIKE
BETWEEN
- 날짜 범위 매칭에 사용 가능