SQL
장점
- 빅데이터를 처리하기 좋다
-구조화된 데이터를 처리하는데 적합하다
-어떤 작업을 하는건지 파악하기쉽다
단점
-비구조화된 데이터 처리에는 좋지 않다
기억해야할 점
현업에서 깨끗한 데이터란 존재하지 않음
●항상 데이터를 믿을 수 있는지 의심하기
●실제로 레코드를 몇 개 살펴보는 것이 중요
데이터 일을 한다면 항상 데이터의 품질을 의심하고 체크
● 중복된 레코드 체크
● 최근 데이터의 존재 여부 체크
● Primary key uniqueness가 지켜지는지 체크하기
● 값이 비어있는 컬럼들이 있는지 테크
● 위의 체크는 코딩의 단위 테스트로 만들어 쉽게 체크할 수 있다
기본 문법
- 다수의 SQL 문을 실행한다면 세미콜론으로 분리 필요 ex) SQL문1; SQL문2; SQL문3
- 주석
- -- : 인라인 한줄짜리 주석
- /* -- */: 여러 줄에 걸쳐 사용 가능한 주석
- 테이블/필드이름의 명명규칙 정하기 ex) User vs Users
DDL
데이터 포맷을 지정하는 언어
CREATE TABLE
● Primary key 속성을 지정할 수 있으나 무시됨
● Big Data 데이터웨어하우스에서는 지켜지지 않음 (Redshift, Snowflake, BigQuery)
● 지키려면 빅데이터 적재하는데 시간이 오래걸림
● CTAS : 테이블을 조회하고 만들어주는것
● CREATE TABLE schema_name.table_name AS SELECT #elt
DROP TABLE : 테이블 자체가 없어진다
● DROP TABLE schema_name.table_name;
● 없는 테이블을 지우려고 하는 경우 에러를 냄, 아래 코드처럼 사용 추천
● DROP TABLE IF EXISTS table_name;
● delete from: 테이블에서 레코드들만 삭제
ALTER TABLE
새로운 컬럼 추가:
■ ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
기존 컬럼 이름 변경:
■ ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름
기존 컬럼 제거:
■ ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
테이블 이름 변경:
■ ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;
DML
SELECT: 테이블(들)에서 레코드들(혹은 레코드수)을 읽어오는데 사용
INSERT INTO: 테이블에 레코드를 추가하는데 사용 (COPY)
UPDATE FROM: 테이블 레코드의 필드 값 수정
DELETE FROM: 테이블에서 레코드를 삭제
SELECT
SELECT 필드이름1, 필드이름2, …
FROM 테이블이름 [JOIN …]
WHERE 선택조건 GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름 [ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능
LIMIT N; 출력 개수 제한
WHERE
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
날짜 사이
STRING 함수
● LEFT(str, N) 왼쪽부터
● REPLACE(str, exp1, exp2) 문자 교체
● UPPER(str)
● LOWER(str)
● LEN(str)
● LPAD, RPAD 길이가 기준보다 작을때 특정문자로 채우기
● SUBSTRING 위치 상관없이 대체
INSERT INTO vs. COPY(Bulk update)
- 속도 COPY가 INSERT보다 빠르다
ORDER BY
- null값의 기준은 DB보다 달라서 기억하기보다 코드로 해결하는 것이 편하다
- ORDER BY 1 DESC; -- NULL값이 가장 앞에 옴
- ORDER BY 1 DESC NULLS LAST; -- NULL값이 맨뒤로 이동
Type Cast
- category::int or cast(category as int)
- 일시적으로 타입 지정
NULL
- 값이 존재하지 않음을 의미
- 0이나 비어있는 string과는 다르다
- =이 아니라 IS를 사용해서 연산해야한다
'데이터 엔지니어링 > 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python' 카테고리의 다른 글
[3주차] Airflow 소개 (4) | 2023.06.18 |
---|---|
[2주차] SQL JOIN & 고급문법 (0) | 2023.06.12 |
[1주차]AWS가 제공하는 데이터 웨어하우스 Redshift에 대해 알아보자 (0) | 2023.06.07 |
[1주차] 데이터 엔지니어링, 데이터 웨어하우스란? (0) | 2023.06.07 |
[1주차] 데이터 팀의 비전과 가치를 만들어내는 방법 (0) | 2023.06.06 |
댓글