Redshift 런치 데모
예제 테이블 소개
SQL 소개
SQL 실습 환경 소개
SELECT 소개
Node type: dc2.large 선택
Admin user name, password 설정
Network and security > Publicly accessible: Enable 선택
DB name, port 설정
사용자 ID: 사용자마다 부여하는 유일한 ID
세션 ID: 세션마다 부여되는 ID
세션: 사용자의 방문을 논리적인 단위로 나눈 것
하나의 사용자는 여러 개의 세션을 가질 수 있음
보통 세션을 만들어낸 접점(경유지)을 채널이란 이름으로 기록
세션이 생긴 시간도 기록
이 정보를 기반으로 다양한 데이터 분석과 지표 설정 가능
Marketing Channel Attribution 분석
SQL 기본
다수의 SQL문을 실행한다면, 세미콜론으로 분리
--
: 한 줄 주석
/* */
: 여러 줄 주석
SQL 키워드는 대문자를 사용하는 등 포맷팅 필요
테이블, 필드 명명 규칙을 정하는 것이 중요
DDL: 테이블 구조 정의 언어
데이터 웨어하우스는 Primary key uniqueness를 보장하지 않기 때문에 Primary key를 지정해도 의미가 없음
CTAS: CREATE TABLE AS 테이블이름 AS SELECT
레코드 수정
INSERT INTO: 테이블에 레코드 추가
UPDATE FROM: 테이블 레코드의 필드값 수정
DELETE FROM: 테이블에서 레코드 삭제
테이블 삭제
DROP TABLE IF EXISTS 테이블이름
vs DELETE FROM
테이블 변경
새로운 컬럼 추가: ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
기존 컬럼 이름 변경: ALTER TABLE 테이블이름 RENAME 현재필드이름 TO 새필드이름;
기존 컬럼 제거: ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
테이블 이름 변경: ALTER TABLE 테이블이름 RENAME TO 새테이블이름;
SELECT
SELECT FROM: 테이블에서 레코드와 필드를 읽어옴
WHERE: 레코드 선택 조건 지정
GROUP BY: 정보를 그룹 레벨에서 추출
ORDER BY: 레코드 순서 결정
보통 다수의 테이블을 조인해서 사용
실습 유의사항
현업에서 깨끗한 데이터라는 것은 존재하지 않음
데이터 관련 업무를 한다면 항상 데이터의 품질을 의심하고 체크하는 버릇이 필요
중복된 레코드 체크
최근 데이터의 존재 여부 체크(freshness)
Primary key uniqueness가 지켜지는지 확인
값이 비어있는 컬럼들이 있는지 체크
unit test 형태로 만들어 위의 항목들을 체크 가능
어느 시점이 되면 테이블이 너무 많이 존재하게 됨
중요 테이블이 무엇인지 파악하고, 그것들의 메타 정보를 잘 관리하는 것이 중요
이런 Data Discovery 문제를 해결하기 위해 다양한 오픈소스와 서비스 출현
테이블에서 레코드를 읽어오는데 사용
LIMIT: 가져올 레코드 수 지정
DISTINCT: 중복값 제거
COUNT: 데이터의 개수 계산
value |
---|
NULL |
1 |
1 |
0 |
0 |
4 |
3 |
count_test 테이블
SELECT COUNT(1) FROM count_test
-> 7
SELECT COUNT(0) FROM count_test
-> 7
SELECT COUNT(NULL) FROM count_test
-> 0
SELECT COUNT(value) FROM count_test
-> 6
SELECT COUNT(DISTINCT value) FROM count_test
-> 4
CASE WHEN: 조건을 사용해 필드값 변환
NULL
값이 존재하지 않음을 나타내는 상수
0과 공백과는 다른 값
필드 지정 시 값이 없는 경우 NULL로 초기화 가능
IS, IS NOT으로 NULL값인지 아닌지 확인 가능
WHERE
IN
WHERE field IN (A, B)
LIKE, ILIKE
WHERE field LIKE "A*"
ILIKE은 대소문자 구분 X
부정: NOT LIKE, NOT ILIKE
BETWEEN
WHERE field BETWEEN(A, B)
위의 오퍼레이터들은 CASE WHEN 구문에서도 사용 가능
STRING Functions
LEFT(str, N)
: str의 앞에서부터 N자리 추출
REPLACE(str, exp1, exp2)
: str에서 exp1을 exp2로 대체
UPPER(str)
: str 대문자로 변환
LOWER(str)
: str 소문자로 변환
LEN(str)
: str 길이 계산
LPAD(str, 5, "a")
: str의 왼쪽 5칸을 문자 "a"로 채움
SUBSTRING(str, a, b)
: str의 a번째 자리에서부터 b자리만큼의 문자열 추출
ORDER BY
오름차순(ASC)이 default
ORDER BY a ASC: a 컬럼의 순서대로 오름차순 정렬
ORDER BY a ASC DESC b, c: a 컬럼의 순서대로 오름차순, b 컬럼의 순서대로 내림차순, c 컬럼의 순서대로 내림차순 정렬
NULL값
ASC: 마지막에 위치
DESC: 처음에 위치
NULLS FIRST, NULLS LAST 옵션을 사용해 순서 설정 가능
타입 변환
DATE Conversion
TO_CHAR, TO_TIMESTAMP
타입 캐스팅
1/2의 결과는 FLOAT 타입으로 캐스팅하지 않으면 0.5가 아닌 0
오퍼레이터 사용
cast 함수 사용