SQL
주석
--
: 한 줄 짜리 주석
/* */
: 여러 줄 짜리 주석
네이밍
- 단수형 vs 복수형
- snake vs camel
- user_session_channel vs UserSessionChannel
CTAS
- CREATE TABLE table_name AS SELECT
- vs CREATE TABLE and then INSERT
CASE WHEN
CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END 필드 이름
NULL
- 0 + NULL ?
- IS NULL, IS NOT NULL
- ORDER BY시 가장 작은 값으로 생각한다.
COUNT
- COUNT(1) : 테이블의 모든 수 카운트
- COUNT(0) : 테이블의 모든 수 카운트
- COUNT(*): 테이블의 모든 수 카운트
- COUNT(NULL): 0
- COUNT(column1): NULL을 제외한 column1 카운트
- COUNT(DISTINCT column1): NULL을 제외하고 DISTINCT하게 카운트
Type Casting
주의할 점
현업에서 깨끗한 데이터는 잘 없다.
- 데이터를 뽑아놓고 확인하는 작업이 필요하다.
- unit test 형태로 체크해볼 수 있다.
- 중복된 레코드가 있는지 체크한다.
- 최근 데이터의 존재여부를 체크한다.
- pk uniqueness를 체크한다.
- 값이 비어있는 칼럼이 있는지 체크한다.
어느 시점이 되면 테이블이 너무 많아진다.
- Data Discovery 문제가 생긴다.
- 어떤 테이블이 내가 원하고 신뢰할 수 있는 정보가 들어있나?
- 누구한테 물어봐야 하나?
- 메타 정보를 잘 관리하는 것이 중요하다.
- 이 문제를 해결하기 위한 오픈소스와 서비스 출현
- DataHub(LinkedIn), Amundsen(Lyft), …
- Select Star, DataFrame, …