SQL 기본
- 맨날 까먹는데.. 문장 끝날 때 세미콜론 붙여야겠다. 한 문장이면 없어도 상관없다지만!
- SQL 주석:
--
, /* -- */
- 팀 프로젝트 때는 팀에서 사용하는 공통 포맷을 정할 필요가 있음
- 테이블/필드 이름의 명명 규칙 정하기: 단수형 vs 복수형, _ vs CamelCasing
SQL DDL (테이블 구조 정의 언어)
- PK 속성을 지정할 수 있으나 무시됨(Primary key uniqueness, 빅데이터 웨어하우스에서는 지켜지지 않음: 왜냐하면 PK 보장하는 게 메모리와 시간이 더 들기 때문에, 대용량 데이터의 적재가 걸림돌이 되기 때문.)
- DROP TABLE: 없는 테이블을 지우려고 하면 에러가 나니까,
DROP TABLE IF EXISTS table_name;
이렇게. (DELETE FROM은 테이블의 레코드를 지우는 거.)
- ALTER TABLE
- 기존 컬럼 이름 변경:
ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름;
- 기존 컬럼 제거:
ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
- 테이블 이름 변경:
ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;
- 새로운 컬럼 추가:
ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
SQL DML (테이블 데이터 조작 언어)
SELECT channel, COUNT(1) -- COUNT(*)
FROM raw_data.user_session_channel
GROUP BY 1; -- 여기서 1은 일련번호니까 1번째인 channel을 의미
- INSERT INTO
- UPDATE FROM
- DELETE FROM
기타
- LIKE vs ILIKE: ILIKE는 대소문자 구분 안함
- float 붙여야 0 아님
SELECT 1/2, 1/2::float;
-- 값은 각각 0, 0.5
현업
- 현업에서 깨끗한 데이터란 존재하지 않음
- 중복된 레코드 제거, 최근 데이터 존재 여부 체크, PK uniqueness가 지켜지는지 확인, 값이 비어있는 컬럼 있나 체크 → unit test로 매번 쉽게 체크 가능
- 어느 시점이 되면 엄청 많은 테이블들이 존재하게 되는데, 이럴 때 생기는 문제들을 해결하기 위해 DataHub(LinkedIn), Amundsen(Lyft), ... 등 서비스 출현