- 데이터를 다루는 검증된 언어
- 장점
- 구조화된 데이터를 다루기 쉽다
- 맵리듀스는 하이브
- 단점
- 비구조화된 데이터 다루기 어려움
- Spark, Hadoop 등으로 대체
- 데이터를 다루는 자세
- 깨끗한 데이터란 존재하지 않음
- 믿을만 한지 항상 의심할 것
- 실제 레코드를 살펴보는 것이 최고 (노가다)
- 항상 데이터의 품질을 의심하고 체크하는 버릇 필요
- 중복된 레코드들 확인
- 최근 데이터의 존재여부 (freshness)
- Primary Key uniqueness 지켜지는 지 확인
- 값이 비어있는 컬럼들이 있는 지 체크
- 코딩의 unit test 형태로 만들어 매번 쉽게 체크 가능
- Data Discovery 문제가 발생하는 경우
- 어느 시점에 축적되는 방대한 데이터 테이블의 양
- 회사 성장과 밀접한 관련
- 중요 테입믈들이 무엇인고 그것들의 메타 정보를 잘 관리하는 것이 중요
- ERD의 중요성
- 이 문제를 해결하기 위한 다양한 오픈소스들
- DataHub(LinkedIn), Amundsen(Lyft)
- Select Star, DataFrame
- SQL의 기본
SQL1; SQL2; SQL3;
- 여러 줄짜리 주석
- 키워드는 포맷팅이 필요 (팀 내 공통 포맷)
- 테이블, 필드 이름의 명명규칙을 정하는 것이 중요
- SQL의 두 가지 측면
Data Definition Language
- CREATE TABLE
- Primary key 속성을 지정할 수 있으나 무시됨
- Primary key uniqueness
- Big Data Warehouse에서는 지켜지지 않음 (Redshift, Snowflake, Bigquery)
- CTAS: SELECT할 때마다 원하는 테이블 생성
- primary key uniqueness를 만든 사람이 보장해 주어야 하며, 직접 확인하려 하면 시간이 너무 오래 걸린다.
Data Manipulation Language
- SQL 문법
-
WHERE
- IN
WHERE Channel in ('Google', 'Youtube')
WHERE channel = 'Google' OR channel = 'Youtube'
NOT IN
-
LIKE and ILIKE
- LIKE 는 문자열 일치에 특화된 CASE
- ILIKE는 CASE에 까다롭지는 않음
-
String 관련 함수
-
INSERT
-
ORDER BY
- Redshift에서는 Null이 가장 큰 값
- MySQL에서는 반대
-
JOIN
- FULL JOIN
- INNER JOIN
- CROSS JOIN
- SELF JOIN
-
JOIN시 유의점
- 중복 레코드가 없고, Primary Key의 uniqueness 보장됨을 확인할 것
- one to one
- one to many -> 이 경우 중복값이 증폭됨